2017-06-05 514 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