【问题标题】:a loop to iterate on a numpy array columns (with dimensionality of either 1D or 2D)一个循环来迭代一个 numpy 数组列(维度为 1D 或 2D)
【发布时间】:2019-04-22 18:42:17
【问题描述】:

我正在尝试编写一个函数,该函数获取一个 numpy 数组 INPUT,并将其列一一传递给另一个函数。 INPUT 数组是 1D 或 2D(不是更多) 第二个函数需要一维数组作为参数。 (len(param.shape)==1)

我读过一个类似的线程,其中 OP 想要对所有列求和并检查其他条件...... 这个,可能需要另一个答案。

所需的伪代码操作:

def func(INPUT,a,b,...)
    for column in INPUT: #whether be a 1D or 2D
        result = another_func(column,...)

试过这个: 问题是如何不检查 func 内 INPUT 数组的维度:

if(len(INPUT.shape)==1):
    another_func(INPUT,....)
elif(len(INPUT.shape)==2):
    for c in range(INPUT.shape[1]):
        another_func(INPUT[:,c])

【问题讨论】:

  • for column in INPUT.T: ... 可能对你有用。转置在 1d 情况下什么都不做;在 2d 中,它将列尺寸放在首位。或者 for j in range(INPUT.shape[-1]): column=INPUT[...,J],.. 按最后一个索引进行迭代。
  • 在您的 INPUT.ndim==2 情况下,enumerat(INPUT) 迭代行,c 是行数,而不是列数。对数组进行迭代会在第一个维度上进行迭代,就像对列表的嵌套列表一样。
  • 对不起,这是一个错字,我复制了代码,并在此处对其进行了编辑,并将其编辑到 range(),就像我尝试过的代码一样
  • 那么如果是1d,不用迭代就用?在这种情况下,您的功能看起来不错。检查尺寸没有错; numpy 函数一直都是这样做的。查看np.atleast_2d 之类的函数。您可以强制 1d 成为 1 行 2d 然后循环!

标签: python numpy numpy-ndarray


【解决方案1】:

思路是:如果是一维输入,转换成一列二维数组,然后作为二维输入。

def func(INPUT, a, b):
    return np.apply_along_axis(
        lambda col: another_func(col, a, b),  # function to apply
        1,  # axis along which to apply; 1 = columns
        np.reshape(np.atleast_2d(H2), (len(H), -1))  # transform 1D->2D, if necessary
    )

【讨论】:

  • 这会将 another_func 应用于列的所有元素,对吗?如果是这样,它不会帮助我,因为 another_func 需要额外的参数。 (我试图通过 ... in result = another_func(column,...) 部分显示这一点)。但非常感谢您的回答
  • 我更新了答案以显示如何传递额外的参数
猜你喜欢
  • 2019-04-26
  • 2021-08-15
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多