2

私は Python の世界に最近移住してきました。Python でマトリックスをより大きなマトリックスにコピーする方法を理解する必要があります。これを Matlab の例で説明しましょう。

A = randn(4,4);
B = eye(2,2);
A(1:2,1:2) = B

与える

A = 

 1.0000          0     3.5784     0.7254
      0     1.0000     2.7694   - 0.0631
-2.2588   - 0.4336   - 1.3499     0.7147
 0.8622     0.3426     3.0349   - 0.2050  

次の方法でNumPyを使用してPythonで同様のことを試みています。

A = np.random.randn(4,4)
B = np.eye(2,2)
A[0:1,0:1] = B

与える

ValueError: output operand requires a reduction, but reduction is not enabled.

もちろん、これを回避する最も簡単な方法はループを使用することですが、ループをベクトル化しておきたいと思います。

forループを使わずにこれを行う方法を教えてください。

4

1 に答える 1

4

問題は次のとおりです。

A[0:1,0:1] = B

あなたがしたい:

A[0:2,0:2] = B

なんで?Python は半開きの範囲を使用するためです。したがって、スライス[0:1]は半分開いた range[0, 1)であり、インデックスのみを意味します0。スライス[0:2]は半分開いた範囲[0, 2)であり、インデックス0と を意味します1

于 2012-12-05T21:25:15.767 に答える