如果我有一个 NumPy 数组,例如 5x3,有没有办法一次将其逐列解包以传递给函数,而不是像这样:my_func(arr[:, 0], arr[:, 1], arr[:, 2])
?
有点像*args
列表解包但按列。
如果我有一个 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]])
让我们编写一个函数来将列添加在一起(通常x.sum(axis=1)
在 NumPy 中完成):
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)]
这将导致错误或不同的结果。