【发布时间】: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