【问题标题】:Enumerate over 2 array's of same shape枚举2个相同形状的数组
【发布时间】:2017-05-22 16:14:55
【问题描述】:

我必须对多维数据(有时是 4D,有时是 3D)执行许多不同类型的函数。我找到了一种使用np.ndenumerate 枚举这些数组的有效方法。但是,这仅限于一次迭代 1 个数组。

为了解决具有多种维度但仍然能够使用相同的功能来修改/更新/使用等这些数组中的数据的问题,我希望能够转换我当前的静态版本:

# Random data
array1 = np.random.rand(5, 7, 50, 40)
array2 = np.random.rand(5, 7, 50, 40)
result = np.zeros(array1.shape)
for (a, b, c, d), array1Data in np.ndenumerate(array1):
    array2Data = array2[a][b][c][d]
    result[a][b][c][d] = np.sqrt(array1Data**2 + array2Data**2)

print(result)

变成类似:

# Random data
array1 = np.random.rand(5, 7, 50, 40)
array2 = np.random.rand(5, 7, 50, 40)
result = np.zeros(array1.shape)
for indexes, array1Data, array2Data in np.ndenumerate(array1, array2):
    result[indexes] = np.sqrt(array1Data**2 + array2Data**2)

print(result)

【问题讨论】:

  • 你就不能写result = np.sqrt(array1**2 + array2**2)吗?
  • 是的,对于这个例子,你可以,但是每当有索引要跳过或如果在里面有其他语句时,我宁愿避免使用 1 衬里并用更自然的语言编写代码,所以我仍然知道我在一个月后再看。

标签: python arrays numpy enumerate


【解决方案1】:

好像输入问题就像橡皮鸭一样,我通过使用辅助函数 enumerate2D 解决了它:

def enumerate2D(array1, array2):
    assert array1.shape == array2.shape, "Error - dimensions."
    for indexes, data in np.ndenumerate(array1):
        yield indexes, data, array2[indexes]

可以完全按照我上面的描述使用:

for indexes, data1, data2 in enumerate2D(array1, array2):
    result[indexes] = np.sqrt(data1**2 + data2**2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多