2017-06-05 142 views
0

我有一個numpy的二維數組:乘以numpy的二維數組與一維數組

[[1,1,1], 
[1,1,1], 
[1,1,1], 
[1,1,1]] 

我怎樣才能得到它,使之與相應的值從一維數組當行相乘從頂部的指標到底二維數組的長度小於一維數組的長度?例如本以上乘:

[10, 20, 30, 40] 

得到這個:

[[10, 10, 10], 
[20, 20, 20], 
[30, 30, 30] 
[40, 40, 40]] 

可能是一個重複的,但我無法找到我尋找確切的事情。提前致謝。

回答

1

numpy*做逐元素相乘,例如通過另一個一維數組乘一維數組:

In [52]: np.array([3,4,5]) * np.array([1,2,3]) 
Out[52]: array([ 3, 8, 15]) 

當你乘一維數組二維數組,同樣的事情發生了二維數組中的每一行:

In [53]: np.array([[3,4,5],[4,5,6]]) * np.array([1,2,3]) 
Out[53]: 
array([[ 3, 8, 15], 
     [ 4, 10, 18]]) 

爲您具體的例子:

In [66]: ones = np.ones(12, dtype=np.int).reshape(4,3) 

In [67]: a = np.array([10, 20, 30, 40]) 

In [68]: (ones.T * a).T 
Out[68]: 
array([[10, 10, 10], 
     [20, 20, 20], 
     [30, 30, 30], 
     [40, 40, 40]]) 
+0

不得不看這意味着什麼,但我現在看到,非常感謝。 – user21398

+0

但等待行長小於1d陣列時會發生什麼?轉置仍然工作嗎? – user21398

+0

@ user21398,如果行長度小於(或大於)1d數組,則不能相乘。 – Akavall