2016-06-12 6 views
-2

"構造体配列"を使用しているかどうかわからないので、私はこの質問を書いています。私は "dtype"コマンドを使用して、異なる入力(整数、浮動小数点数など)を持つキーボードから行列を作成しました。次に、列 "p"と "q"に繰り返し要素を見つける必要があります。これらの要素がある場合は、列 "z"の各要素を合計したいと思います。ありがとう。これは私のPythonコードです:Pythonで構造体配列を使用するには?

from numpy import * 
from math import * 
from cmath import * 
from numpy.linalg import * 
number_lines_=raw_input("Lines:") 
numero_lines=int(number_lines_) 
ceros=zeros((numero_lines,1)) 
dtype=([('p',int),('q',int),('r',float),('x',float),('b',complex),('z',complex),('y',complex)]) 
#print dtype 
leng=len(dtype) 
#print leng 
yinfo=array(ceros,dtype) 
#print shape(yinfo) 
if numero_lines>0: 
    for i in range(numero_lines): 
     p_=raw_input("P: ") 
     p=int(p_) 
     if p>0: 
      yinfo['p'][i]=p 
      #print yinfo 
      q_=raw_input("Q: ") 
      q=int(q_) 
      if q>0 and q!=p: 
       yinfo['q'][i]=q 
       r_=raw_input("R: ") 
       r=float(r_) 
       yinfo['r'][i]=r 
       x_=raw_input("X: ") 
       x=float(x_) 
       yinfo['x'][i]=x 
       b_=raw_input("b:") 
       b=complex(b_) 
       yinfo['b'][i]=complex(0,b) 
       yinfo['z'][i]=complex(yinfo['r'][i],yinfo['x'][i]) 
       yinfo['y'][i]=1./(yinfo['z'][i]) 
# print "\n" 
print yinfo 
print type(yinfo) 
print yinfo.shape 

答えて

0

私はいくつかの変更を提案してみましょう:

import numpy as np # not * 
.... 
numero_lines=int(number_lines_) 
... 
# don't use numpy function names as variable names 
# even the np import 
dt=np.dtype([('p',int),('q',int),('r',float),('x',float),('b',complex),('z',complex),('y',complex)]) 
... 
yinfo=np.zeros((numero_lines,),dtype=dt) 
# make a zero filled array directly 
# also make it 1d, I don't think 2nd dimension helps you 
# if numero_lines>0: omit this test; range(0) is empty 

# link each of the fields to a variable name 
# changing a value of yinfo_p will change a value in yinfo 
yinfo_p=yinfo['p'] 
yinfo_q=yinfo['q'] 
# etc 

for i in range(numero_lines): 
    p_=raw_input("P: ") 
    p=int(p_) 
    if p>0: 
     yinfo_p[i]=p 
     #print yinfo 
     q_=raw_input("Q: ") 
     q=int(q_) 
     if q>0 and q!=p: 
      yinfo_q[i]=q 
      r_=raw_input("R: ") 
      r=float(r_) 
      yinfo_r[i]=r 
      x_=raw_input("X: ") 
      x=float(x_) 
      yinfo_x[i]=x 
      b_=raw_input("b:") 
      b=complex(b_) 
      yinfo_b[i]=complex(0,b) 

# dont need to fill in these values row by row 
# perform array operations after you are done with the input loop 
yinfo_z[:] = yinfo_r + 1j*yinfo_x 
yinfo_y[:] = 1./yinfo_z 

は、代わりに私はにそれらを組み立てることができるすべてのyinfo_*値に充填した後

yinfo_p = np.zeros((numero_lines,), dtype=int) 
yinfo_q = ... 

を定義している可能性が構造化された配列 - それが私が他の用途に必要とするものなら。

yinfo['p'] = yinfo_p 
etc. 

これは、構造化配列の使用には適していません。 yinfo_b変数で表示しようとすると、各フィールドは個別の1d配列であるかのように使用しています。

私は実際にこれらの変更を実行していないので、いくつかのエラーがあるかもしれませんが、あなたのコードを改善できるアイディアをお寄せいただければ幸いです。

関連する問題