4

Python では、1 次元配列から 2 次元配列を行ごとに減算したいと考えています。

「for」ループとインデックスを使用してそれを行う方法は知っていますが、numpy 関数を使用する方が速いと思います。しかし、私はそれを行う方法を見つけられませんでした。「for」ループの例を次に示します。

from numpy import *
x=array([[1,2,3,4,5],[6,7,8,9,10]])
y=array([20,10])
j=array([0, 1])
a=zeros([2,5])
for i in j :
...     a[i]=y[i]-x[i]

そして、これは機能しないものの例で、「for」ループをこれに置き換えます:

a=y[j]-x[j,i]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape

提案はありますか?

4

2 に答える 2

7

問題はy-x、それぞれの形状を持っていること(2) (2,5)です。適切なブロードキャストを行うには、 shape が必要です(2,1) (2,5).reshape要素の数が保持されている限り、これを行うことができます。

y.reshape(2,1) - x

与えます:

array([[19, 18, 17, 16, 15],
   [ 4,  3,  2,  1,  0]])
于 2012-04-16T17:36:30.970 に答える
2
y[:,newaxis] - x 

も動作するはずです。(ほとんど)比較上の利点は、次元のサイズではなく、次元自体に注意を払うことです。

于 2012-06-26T15:54:51.467 に答える