2011-05-02 23 views
11

我想知道是否有一個簡單的方法乘以標量的numpy矩陣。本質上,我希望所有的值都乘以常數40.這將是一個nxn矩陣,對角線上有40個矩陣,但是我想知道是否有更簡單的函數來縮放這個矩陣。或者我會如何製作與我的其他矩陣形狀相同的矩陣並填充其對角線?我如何找到Numpy矩陣的標量積?

對不起,如果這看起來有點基本,但由於某種原因,我無法在文檔中找到它。

回答

8

簡單:

N = 100 
a = np.eye(N) # Diagonal Identity 100x100 array 
b = 40*a # multiply by a scalar 

如果你真的想要一個numpy的矩陣VS數組,你可以做a = np.asmatrix(np.eye(N))代替。但總的來說*是numpy中元素方式的乘法。

+3

如果性能問題,OP可能不想創建一個副本'b',在這種情況下'a * = 40'將就地擴展數組。 – Paul 2011-05-02 01:11:46

+0

b = np.diag((40 * a,)* N) – cgohlke 2011-05-04 04:46:32

+0

'numpy.fill_diagonal()'專門用於填充給定元素的對角線。因此,它比構建單位矩陣然後將其所有元素乘以一個常量更加明確和快速。 – EOL 2013-04-09 02:41:20

10

如果你想要一個在其他地方有對角線和零點的矩陣,你可以在0矩陣上使用NumPy的函數fill_diagonal()。可以因此直接做:

N = 100; value = 40 
b = np.fill_diagonal(np.zeros((N, N)), value) 

這包括僅設置元素增加到一定值,因此很可能是比涉及所有由恆定的一個矩陣的元素乘以代碼更快。這種方法也有明顯的優點,即用特定的值填充對角線。

如果你想對角矩陣b是相同尺寸的另一個矩陣a,您可以使用下面的快捷方式(無需顯式大小N):

b = np.fill_diagonal(np.zeros_like(a), value) 
2

在@ EOL的回答, b將是「None」,fill_diagonal的返回值不是填充數組。