2

次の問題があります。次の関数を評価したい

def sigLinZ(self,val,omega):
    A = 1
    C = 0 
    D = 1 

    B =1./(omega*val*1j)

    return np.asmatrix(np.array([[A,B],[C,D]]))

そのような方法でpyplotで使用できるように:

omega = numpy.arange(0,100,1)
y = classInstance.sigLinZ(12,omega)
plt.plot(omega,y)

しかし、これは機能しません。パイソンは次のように述べています。

Traceback (most recent call last):


File "testImpedanz.py", line 132, in test6_lineImpedanz
    print "neue Matrix: ",  lineImpe.sigLinZ('C',lineImpe.C(),np.array([600e6,300e6]))
  File "/afs/physnet.uni-hamburg.de/users/ap_h/pgwozdz/Dokumente/PythonSkriptsPHD/ImpedanzCalculation.py", line 350, in sigLinZ
    return np.mat(np.array([[A,B],[C,D]]))
TypeError: only length-1 arrays can be converted to Python scalars

numpy 関数の場合、この手順は問題なく機能しますが、私の関数ではまったく機能しません。

4

2 に答える 2

3

omegaメソッドに渡す定義で、マトリックスの要素に配列を挿入しようとしています。omega各要素を個別に渡すことを繰り返すか、配列を処理して行列のリストや 3D 配列のようなものを返すようにsigLinZ書き直す必要があります。sigLinZ

于 2013-09-03T13:50:12.057 に答える
1

まず、問題は pylab とは関係なく、numpy にのみ関連しています。次の行で失敗します。

return np.asmatrix(np.array([[A,B],[C,D]]))

そして実際にここで失敗します

np.array([[A,B],[C,D]])

動作しない理由は、エラー メッセージとオブジェクトの形状から判断できます。omegaの形で通過すると

print omega
>>> (100,)

2x2それをサイズのオブジェクトに入れようとすると、[[A,B],[C,D]]実際に文句を言うでしょう

TypeError: only length-1 arrays can be converted to Python scalars

関数からスカラー値を返すつもりでしたsigLinZか? plt.plot結果で簡単なコマンドを実行しようとしているので、私はそれを推測しています。

編集:行列の行列が本当に必要な場合は、他のエントリを同じサイズにする必要がありますB

def sigLinZ(val,omega):
  B = 1./(omega*val*1j)
  A = 1*np.ones(B.shape)
  C = 0*np.ones(B.shape)
  D = 1*np.ones(B.shape)
  return np.array([[A,B],[C,D]])

(2,2,100)つまり、最後のインデックスは、一連の 2x2 行列の配列カウントを設定します。Sidenoteは、そのままではBゼロで割ります。

于 2013-09-03T13:50:29.120 に答える