2

cos(v_t)、cos(2 * v_t)、cos(3 * v_t)、...などのコサインのセットが入力された nxm numpy 配列を作成しようとしています。 ;

v_t = np.linspace(0,tmax,tsteps)
m_psi = np.zeros([tsteps,m])
for i in xrange(m):
  for j in xrange(tsteps):
    m_psi[j,i] = np.cos(v_t * k * 2 * pi/T)
    k += 1

しかし、これはエラーを返します

ValueError: setting an array element with a sequence.

配列の行または列がコサインであるのではなく、配列のすべての要素がこれらのコサインのいずれかである必要があります (np.dot(R,m_psi) のような何らかの操作を実行するためです)。 R は別の 2D 配列であり、この乗算の結果も行列でなければなりません)。

編集:明確にするために、私は次のようなものを探しています

[[cos(v_t),     cos(2*v_t),   ...,cos(m*v_t)],
[cos((m+1)*v_t),cos((m+2)*v_t,...,cos(2*m*t)],
[etc.]]
4

1 に答える 1

1

編集以下のあなたのコメントに基づいて、この機能しないコード:

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.array([tsteps,m])
for j in range(m):
    m_psi[:,np.cos(v_t*m*2*pi/T)]

次のように動作するnumpyに変換できます:

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.empty((tsteps, m))
for j in xrange(m) :
    m_psi[:, m] = np.cos(v_t * m * 2 * np.pi / T)

ループの代わりにブロードキャストを使用すると、よりエレガントで数え切れないほどの方法でまったく同じことを実現できます。

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.cos(v_t[:, None] * np.arange(m)[None, :] * 2 * np.pi / T)  

あなたはいくつかの詳細を理解する必要がありますが、このようなものがあなたが求めているものかもしれません:

v_t = np.linspace(0, m * tmax, m * tsteps)
m_psi = np.cos(v_t * 2 * np.pi / T).reshape(tsteps, m)

サイン部分を省略した場合:

>>> m = 4
>>> tsteps = 5
>>> np.arange(m * tsteps).reshape(tsteps, m)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])

これらの配列の値は、上記のコードのコサイン内の基本値を乗算するものになります。

于 2013-02-06T04:20:59.627 に答える