【问题标题】:Unpack NumPy array by column按列解压缩 NumPy 数组
【发布时间】: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


【解决方案1】:

您可以解压缩数组的转置,以便将列用作函数参数:

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 数组将沿第一个维度解包,因此需要转置数组。

【讨论】:

    【解决方案2】:

    numpy.split 将一个数组拆分为多个子数组。在您的情况下,indices_or_sections 是 3,因为您有 3 列,axis = 1 因为我们按列拆分。

    my_func(numpy.split(array, 3, 1))
    

    【讨论】:

      【解决方案3】:

      我猜numpy.split 将来会不够用。相反,它应该是

      my_func(tuple(numpy.split(array, 3, 1)))
      

      目前,python 打印以下警告:

      FutureWarning:对多维使用非元组序列 索引已弃用;使用arr[tuple(seq)] 而不是arr[seq]。 将来这将被解释为数组索引, arr[np.array(seq)],这将导致错误或 结果不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-31
        • 2016-12-26
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2018-11-03
        • 2015-02-06
        • 2014-08-26
        相关资源
        最近更新 更多