首页 > 解决方案 > 循环遍历一个 numpy 数组,将内容汇总到另一个数组

问题描述

我试图循环遍历一个 nd numpy 数组并遇到问题

下面代码的第一部分只是制作了一个坐标系和随机数

import numpy as np
import math
N = 100
h, i = np.linspace(-20., 20., N), np.linspace(-20., 20., N)
xh, yi = np.meshgrid(h, i) 
E1= np.empty_like(xh)   
E2= np.empty_like(yi)   
Et = np.empty_like(xh)
poo=10 
ppp = [5]*poo
A=np.linspace(10, 50,poo)
B=np.linspace(-30, 10,poo)
C=np.linspace(-10, 20,poo)
D=[]
AAA=[]
for i in range(len(A)):
    D=(A[i],B[i],C[i])      
    AAA.append(D)   

#everything above this is fine    

在此之下,我想要等式 AAA0-AAA1+AAA2 = E1 有 10 个不同的 D,每个 D 有 3 个分量。所有 D 的组合 = AAA

for i in range(poo):      
    for j in range(poo):
        x, y = xh[i,j], yi[i,j]
        for k in range(len(AAA)):
            E1[i,j] += AAA[k][0]-AAA[k][1]+AAA[k][2]
            E2[i,j] += AAA[k][0]-AAA[k][1]*AAA[k][2]
    Et[i,j] = (E1[i,j]**2+E2[i,j]**2)**(0.5)
print(Et)

我得到的结果是这样的。似乎每个坐标的 E1 仅在 1 个坐标上进行总结,而 E2 也在做同样的事情。

我怎样才能使 E1 循环通过所有 AAA 的第一个坐标,然后通过所有 AAA 的第二个坐标等....

[[  1.19876022e-311   1.19880258e-311   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000   0.00000000e+000]
 [  0.00000000e+000   0.00000000e+000   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000   0.00000000e+000]
 [  0.00000000e+000   0.00000000e+000   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000   0.00000000e+000]
 ..., 
 [  0.00000000e+000   0.00000000e+000   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000   0.00000000e+000]
 [  0.00000000e+000   0.00000000e+000   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000   0.00000000e+000]
 [  0.00000000e+000   0.00000000e+000   0.00000000e+000 ...,
    0.00000000e+000   0.00000000e+000 

我只是希望它正确循环而不是将所有内容都放在前几个值中

标签: pythonloopsnumpy

解决方案


警告 - NAA

你有太多明显的问题,你没有充分解释你想要它做什么。

在您的示例中,E1形状E2是 (100,100) 并且poo10

for i in range(poo):      
    for j in range(poo):
        ...
        E1[i,j] ...
        ...  

此循环仅覆盖-的左上角( 10,10) 。E1E2Ex[:10, :10]

要覆盖整个空间,请尝试

for i in range(N):      
    for j in range(N):

但看起来你还有其他问题。

E1[i,j] += AAA[k][0]-AAA[k][1]+AAA[k][2]

有效地意味着

E1[i,j] = (AAA[k][0]-AAA[k][1]+AAA[k][2]) ** (N*N)  #if using range(N) in the loops

这使得数字非常大。


推荐阅读