我必须在多维数据上执行许多不同类型的功能(有时是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)
答案 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)