Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 枚举超过2个数组';它的形状是一样的_Python_Arrays_Numpy_Enumerate - Fatal编程技术网

Python 枚举超过2个数组';它的形状是一样的

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

我必须对多维数据(有时是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)

好像键入问题就像橡皮鸭子一样,我通过使用助手函数
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行,用更自然的语言编写代码,这样我在一个月后查看时仍然知道我做了什么。