我想知道是否有一個簡單的方法乘以標量的numpy矩陣。本質上,我希望所有的值都乘以常數40.這將是一個nxn矩陣,對角線上有40個矩陣,但是我想知道是否有更簡單的函數來縮放這個矩陣。或者我會如何製作與我的其他矩陣形狀相同的矩陣並填充其對角線?我如何找到Numpy矩陣的標量積?
對不起,如果這看起來有點基本,但由於某種原因,我無法在文檔中找到它。
我想知道是否有一個簡單的方法乘以標量的numpy矩陣。本質上,我希望所有的值都乘以常數40.這將是一個nxn矩陣,對角線上有40個矩陣,但是我想知道是否有更簡單的函數來縮放這個矩陣。或者我會如何製作與我的其他矩陣形狀相同的矩陣並填充其對角線?我如何找到Numpy矩陣的標量積?
對不起,如果這看起來有點基本,但由於某種原因,我無法在文檔中找到它。
簡單:
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中元素方式的乘法。
如果你想要一個在其他地方有對角線和零點的矩陣,你可以在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)
在@ EOL的回答, b將是「None」,fill_diagonal的返回值不是填充數組。
如果性能問題,OP可能不想創建一個副本'b',在這種情況下'a * = 40'將就地擴展數組。 – Paul 2011-05-02 01:11:46
b = np.diag((40 * a,)* N) – cgohlke 2011-05-04 04:46:32
'numpy.fill_diagonal()'專門用於填充給定元素的對角線。因此,它比構建單位矩陣然後將其所有元素乘以一個常量更加明確和快速。 – EOL 2013-04-09 02:41:20