循环通过一个numpy数组将东西总结到另一个数组

时间:2018-05-19 13:56:06

标签: python loops 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也在做同样的事情。

如何通过所有AAA的第一个共同联盟进行E1循环,然后通过所有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 

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

1 个答案:

答案 0 :(得分:0)

警告 - NAA

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

在您的示例中,E1E2形状为(100,100),poo10

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

此循环仅涵盖E1E2 - Ex[:10, :10]左上角(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

这使得数字非常大。