Soru numpy matrisin her sırasını vektörle çıkar


Yani benim bir n x d matris ve bir n x 1 vektör. Matristeki her satırı vektörle çıkarmak için bir kod yazmaya çalışıyorum.

Şu anda bir for Yinelenen ve çıkartan döngü ivektör tarafından matriste satır. Tüm bir matrisi vektörle basitçe çıkarmanın bir yolu var mı? 

Teşekkürler!

Mevcut kod:

for i in xrange( len( X1 ) ):
    X[i,:] = X1[i,:] - X2

İşte burası X1 matrisin isatır X2 vektör Bunu yapamam ki bir şeye ihtiyacım yok for loop?


32
2017-10-13 04:43


Menşei




Cevaplar:


Bu çalışır numpy fakat sadece sondaki eksenler aynı boyuta sahipse. İşte bir vektörü matristen başarıyla çıkarmanın bir örneği:

In [27]: print m; m.shape
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
Out[27]: (4, 3)

In [28]: print v; v.shape
[0 1 2]
Out[28]: (3,)

In [29]: m  - v
Out[29]: 
array([[0, 0, 0],
       [3, 3, 3],
       [6, 6, 6],
       [9, 9, 9]])

Bu işe yaradı, çünkü her ikisinin de izleyen ekseni aynı boyuta sahipti (3).

Senin durumunda, lider eksenler aynı boyuta sahipti. İşte bir örnek, aynı kullanarak v Yukarıdaki gibi, bunun nasıl düzeltilebileceği:

In [35]: print m; m.shape
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
Out[35]: (3, 4)

In [36]: (m.transpose() - v).transpose()
Out[36]: 
array([[0, 1, 2, 3],
       [3, 4, 5, 6],
       [6, 7, 8, 9]])

Yayın eksenleri için kurallar derinlemesine açıklanmıştır. İşte.


44
2017-10-13 05:03



Ne dersin m-v.transpose() ikinci durumda? - Mad Physicist


@ John1024 cevabına ek olarak, numpy cinsinden tek boyutlu bir vektörün "transpoz" edilmesi şu şekilde yapılabilir:

In [1]: v = np.arange(3)

In [2]: v
Out[2]: array([0, 1, 2])

In [3]: v = v[:, np.newaxis]

In [4]: v
Out[4]:
array([[0],
       [1],
       [2]])

Buradan, çıkarılıyor v her sütundan m yayın kullanarak önemsiz:

In [5]: print(m)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [6]: m - v
Out[6]:
array([[0, 1, 2, 3],
       [3, 4, 5, 6],
       [6, 7, 8, 9]])

8
2017-10-13 05:26