Python 按列解压缩NumPy数组
如果我有一个NumPy数组,例如5x3,有没有一种方法可以一次将其逐列解压以传递给函数,而不是像这样:Python 按列解压缩NumPy数组,python,arrays,numpy,argument-unpacking,Python,Arrays,Numpy,Argument Unpacking,如果我有一个NumPy数组,例如5x3,有没有一种方法可以一次将其逐列解压以传递给函数,而不是像这样:my_func(arr[:,0],arr[:,1],arr[:,2]) 类似于列表解包的*args,但按列进行。您可以解包数组的转置,以便将列用于函数参数: my_func(*arr.T) 下面是一个简单的例子: >>> x = np.arange(15).reshape(5, 3) array([[ 0, 5, 10], [ 1, 6, 11],
my_func(arr[:,0],arr[:,1],arr[:,2])
类似于列表解包的
*args
,但按列进行。您可以解包数组的转置,以便将列用于函数参数:
my_func(*arr.T)
下面是一个简单的例子:
>>> x = np.arange(15).reshape(5, 3)
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
让我们编写一个函数来将列添加到一起(通常使用NumPy中的x.sum(axis=1)
):
然后我们有:
>>> add_cols(*x.T)
array([15, 18, 21, 24, 27])
NumPy数组将沿第一维度展开,因此需要转置数组。将数组拆分为多个子数组。在您的例子中,索引\u或\u节
是3,因为您有3列,轴=1
,因为我们按列拆分
my_func(numpy.split(array, 3, 1))
我猜
numpy.split
在将来是不够的。相反,它应该是
my_func(tuple(numpy.split(array, 3, 1)))
当前,python打印以下警告:
未来警告:使用非元组序列进行多维
不推荐使用索引;使用arr[tuple(seq)]
代替arr[seq]
。
将来这将被解释为数组索引,
arr[np.array(seq)]
,这将导致错误或错误
不同的结果
np.hsplit(x,x.shape[1])
没问题,很高兴它有帮助!
my_func(tuple(numpy.split(array, 3, 1)))