2016-05-01 55 views
-2

我有一个3x10矩阵(以numpy数组的形式),并希望乘以3x3变换矩阵。我不认为np.dot正在进行全矩阵乘法。有没有一种方法与数组进行乘法运算?Numpy,乘3x3数组乘3x3数组?

transf = np.array([ [0.1, -0.4, 0],[0.9, 0.75, -0.1],[0.5, 0.75, -0.9] ]) 

one = [0,1,2,3,4,5,6,8,9] 
two = [1,2,3,4,5,6,8,9,10] 
three = [2,3,4,5,6,8,9,10,11] 

data = np.array([ one, two, three ]) 

new_data = np.dot(transf,data) 

是否有一个圆点函数,它整个矩阵乘法,而不是仅仅"For N dimensions it is a sum product over the last axis of a and the second-to-last of b"

+1

[documentation](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.dot.html)指出,对于2d阵列,'np.dot'等同于矩阵乘法... – mgilson

回答

2

你错过了逗号的transf最后两个条目。解决这些问题,你会得到矩阵乘法正如你所期望:

# Missing commas between 0.75 and -0.1, 0.75 and -0.9. 
transf = np.array([ [0.1, -0.4, 0],[0.9, 0.75 -0.1],[0.5, 0.75 -0.9] ]) 

# Fix with commas 
transf = np.array([ [0.1, -0.4, 0],[0.9, 0.75, -0.1],[0.5, 0.75, -0.9]]) 

因为第一阵列实际上不是一个合法的2-d阵列,np.dot不能执行矩阵乘法。

1

这只是*运营商,但您将需要定义matrix而不是array

import numpy as np 
transf = np.matrix([ [1,2,3],[4,5,6],[1,2,3] ])  # 3x3 matrix 
data = np.matrix([[2], [3], [4] ])  # 3x1 matrix 

print transf * data 

希望它有帮助。

+0

矩阵*与阵列点相同。 – hpaulj

+0

而较新的Python/numpys有一个“@”运算符,它的行为方式相同。 – hpaulj

+0

@hpaulj你有这方面的来源吗?我不知道 '@'在Python中作为运算符 – KevinOrr