Python 按列解压缩NumPy数组

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],

如果我有一个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],
       [ 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)))