Python 枚举超过2个数组';它的形状是一样的
我必须对多维数据(有时是4D,有时是3D)执行许多不同类型的功能。我发现了一种使用Python 枚举超过2个数组';它的形状是一样的,python,arrays,numpy,enumerate,Python,Arrays,Numpy,Enumerate,我必须对多维数据(有时是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.zero
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)
好像键入问题就像橡皮鸭子一样,我通过使用助手函数
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)
你能不能只写
result=np.sqrt(array1**2+array2**2)
?是的,对于这个例子,你可以,但每当有索引要跳过或者里面有if-else语句时,我宁愿避免使用1行,用更自然的语言编写代码,这样我在一个月后查看时仍然知道我做了什么。