2016-11-08 163 views
0

我对Numpy数组感到困惑。假设我有两个Numpy数组。Numpy矩阵(数组)理由

a = np.array([[1,2], [3,4], [5,6]]) 
b = np.array([[1,10], [1, 10]]) 

我的ab解释是3×2和2×2矩阵,即,

a = 1 2 b = 1 10 
    3 4  1 10 
    5 6 

然后,我想这应该是细做a * b,因为它是3×2和2×2矩阵的乘法。但是,这是不可能的,我不得不使用a.dot(b)

鉴于这个事实,我认为我对Numpy阵列的解释是不正确的。任何人都可以让我知道我应该如何看待Numpy数组?我知道如果我将ab转换为np.matrix,我可以做a*b。然而,看着其他的代码,似乎人们可以使用Numpy数组作为矩阵,所以我想知道我应该如何理解Numpy数组的矩阵。

+0

如果你使用的是Python 3.5,你可以使用'a @ b'来做你想做的事。 'a * b'进行_elementwise_乘法运算。 – SethMMorton

+0

此外,要检查您是否符合尺寸,可以尝试'.shape'查看尺寸。然后,如果您发现尺寸不匹配,您可以转置它。 :) – 2016-11-08 04:30:00

+0

这两种multipatatin是有用的。看看MATLAB代码,你会看到'a * b'和'a。* b'。 – hpaulj

回答

2

对于numpy的阵列中,*操作者通过阵列的元件乘法用于元件。如果两个数组具有相同的尺寸,那么这只是很好的定义。照亮* -multiplication,注意通过用单位矩阵元素乘法该元素将不会返回相同的矩阵

>>> I = np.array([[1,0],[0,1]]) 
>>> B = np.array([[1,2],[3,4]]) 
>>> I*B 
array([[ 1, 0], 
     [ 0, 4]]) 

使用numpy的功能dot(a,b)产生典型的矩阵乘法。

>>> dot(I,B) 
array([[ 1, 2], 
     [ 3, 4]]) 
+1

结果如何(I * B)第二列第二行? –

+0

谢谢你的收获!我意外地从我的终端复制并粘贴了错误的乘法运算。上面更正的错误。 –

1

np.dot可能是你在找什么?

a = np.array([[1,2], [3,4], [5,6]]) 

b = np.array([[1,10], [1, 10]]) 

np.dot(a,b) 

Out[6]: 
array([[ 3, 30], 
     [ 7, 70], 
     [ 11, 110]])