【发布时间】:2014-11-20 18:07:35
【问题描述】:
如果我有一个 NumPy 数组,例如 5x3,有没有办法一次将其逐列解包以传递给函数,而不是像这样:my_func(arr[:, 0], arr[:, 1], arr[:, 2])?
有点像*args 用于列表解包,但按列。
【问题讨论】:
-
np.hsplit(x,x.shape[1])
标签: python arrays numpy argument-unpacking
如果我有一个 NumPy 数组,例如 5x3,有没有办法一次将其逐列解包以传递给函数,而不是像这样:my_func(arr[:, 0], arr[:, 1], arr[:, 2])?
有点像*args 用于列表解包,但按列。
【问题讨论】:
np.hsplit(x,x.shape[1])
标签: python arrays numpy argument-unpacking
您可以解压缩数组的转置,以便将列用作函数参数:
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) 完成):
def add_cols(a, b, c):
return a+b+c
那么我们有:
>>> add_cols(*x.T)
array([15, 18, 21, 24, 27])
NumPy 数组将沿第一个维度解包,因此需要转置数组。
【讨论】:
numpy.split 将一个数组拆分为多个子数组。在您的情况下,indices_or_sections 是 3,因为您有 3 列,axis = 1 因为我们按列拆分。
my_func(numpy.split(array, 3, 1))
【讨论】:
我猜numpy.split 将来会不够用。相反,它应该是
my_func(tuple(numpy.split(array, 3, 1)))
目前,python 打印以下警告:
FutureWarning:对多维使用非元组序列 索引已弃用;使用
arr[tuple(seq)]而不是arr[seq]。 将来这将被解释为数组索引,arr[np.array(seq)],这将导致错误或 结果不同。
【讨论】: