簡體   English   中英

如何從NumPy矩陣的列而不是行中減去?

[英]How to subtract from columns and not rows in NumPy matrices?

我有一個矩陣X

[[  2.  nan  nan  nan]
 [  3.   2.  nan  nan]
 [ nan   5.   5.  nan]
 [ nan  nan  nan  nan]]

和清單b

[-1.0, 2.0, 0.5, -2.0]

當我做X - b我得到:

[[ 3.   nan  nan  nan]
 [ 4.   0.   nan  nan]
 [ nan  3.   4.5  nan]
 [ nan  nan  nan  nan]]

如果我想跨列而不是行減去b怎么辦。

我正在尋找類似X - b.transpose()東西:

[[ 3.   nan  nan  nan]
 [ 1.   0.   nan  nan]
 [ nan  4.5  4.5  nan]
 [ nan  nan  nan  nan]]

使用numpy.vstack函數的解決方案(垂直堆疊數組):

a = np.array([[ 2.0,  np.NaN,  np.NaN,  np.NaN],
     [  3.0,   2.0, np.NaN,  np.NaN],
     [ np.NaN,   5.0,   5.0,  np.NaN],
     [ np.NaN,  np.NaN,  np.NaN,  np.NaN]])

b = np.array([-1.0, 2.0, 0.5, -2.0])
print(a - np.vstack(b))

輸出:

[[ 3.   nan  nan  nan]
 [ 1.   0.   nan  nan]
 [ nan  4.5  4.5  nan]
 [ nan  nan  nan  nan]]

這是一個值得指出的陷阱:

>>> a = np.identity(4)
>>> a
array([[ 1.,  0.,  0.,  0.],                                                                                                                                
       [ 0.,  1.,  0.,  0.],                                                                                                                                
       [ 0.,  0.,  1.,  0.],                                                                                                                                
       [ 0.,  0.,  0.,  1.]])                                                                                                                               
>>> b = [1,2,3,4]                                                                                                                     
>>> a-b                                                                                                                                                     
array([[ 0., -2., -3., -4.],                                                                                                                                
       [-1., -1., -3., -4.],                                                                                                                                
       [-1., -2., -2., -4.],                                                                                                                                
       [-1., -2., -3., -3.]])                                                                                                                               
>>> a-np.matrix(b)
matrix([[ 0., -2., -3., -4.],                                                                                                                               
        [-1., -1., -3., -4.],                                                                                                                               
        [-1., -2., -2., -4.],                                                                                                                               
        [-1., -2., -3., -3.]])                                                                                                                              
>>> a-np.array(b)                                                                                                                                     
array([[ 0., -2., -3., -4.],                                                                                                                                
       [-1., -1., -3., -4.],                                                                                                                                
       [-1., -2., -2., -4.],                                                                                                                                
       [-1., -2., -3., -3.]])
>>> a-np.matrix(b).T # T is short for transpose()
matrix([[ 0., -1., -1., -1.],
        [-2., -1., -2., -2.],
        [-3., -3., -2., -3.],
        [-4., -4., -4., -3.]])
>>> # BUT:
... a-np.array(b).T
array([[ 0., -2., -3., -4.],
       [-1., -1., -3., -4.],
       [-1., -2., -2., -4.],
       [-1., -2., -3., -3.]])
>>> # with 1d arrays .T does nothing! Use instead
... a-np.array(b)[:, None]
array([[ 0., -1., -1., -1.],
       [-2., -1., -2., -2.],
       [-3., -3., -2., -3.],
       [-4., -4., -4., -3.]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM