将元组列表解压缩到NumPy数组中。

3

考虑这样一个元组列表:

a = [(1,2), (3,4)]

我经常发现自己试图将像这样的列表解压为每个列值的单独列表,例如:
b,c = list(zip(*a))

在这种情况下,b 将是一个包含值 13 的列表。
我经常发现自己想要将 bc 转换为 numpy 数组而不是列表。 在这种情况下,我通常会这样做:
b,c = list(zip(*a))
b = np.array(b)
c = np.array(c)

最后两行看起来很繁琐。是否有一种方法可以将列表直接解压缩为两个numpy数组,而不必通过numpy.array直接进行类型转换?谢谢。

5
b, c = np.array(a).T 这行代码是否符合您的需求?(T代表转置操作。) - alani
1
哦,确实如此!谢谢。请发布答案,以便我将其标记为已解决。 - deppep
1
好的,我会做。 - alani
1个回答

3

通过调用np.array,您可以将元组列表转换为二维numpy数组。然后可以对其进行转置,并使用元组赋值沿第一维展开:

b, c = np.array(a).T

这里的意思是:

>>> import numpy as np
>>> a = [(1,2), (3,4)]
>>> b, c = np.array(a).T   # or:  np.array(a).transpose()
>>> b
array([1, 3])
>>> c
array([2, 4])

注意:你将会有一个与数组a具有相同元素数量的临时数组,因此它可能比原始解决方案不太内存高效,特别是如果你要解包成更多的一维数组。


我特意登录只是为了说:解决方案太棒了!干得好。 - mat
美丽的解决方案。内存很便宜,但美观不是。 - rocketman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接