枚举2个相同形状的数组

时间:2017-05-22 16:14:56

标签: python arrays numpy enumerate

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

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

# 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)

1 个答案:

答案 0 :(得分: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)