Python numpy中的矩阵乘法错误
我有以下两个numpy阵列:Python numpy中的矩阵乘法错误,python,numpy,Python,Numpy,我有以下两个numpy阵列: np.random.seed(1) y2=np.random.standard_normal((50,1)) lambda_=np.zeros((100,2)); lambda_[0]=np.random.gamma(1,1,2); 但是当我试着去做的时候 np.dot(y2,lambda_[0]) 或其转置版本: np.dot(y2,lambda_[0].T) 我得到了错误值error:矩阵没有对齐 现在我明白了,我可以通过使用numpy矩阵来避免这个错误,
np.random.seed(1)
y2=np.random.standard_normal((50,1))
lambda_=np.zeros((100,2));
lambda_[0]=np.random.gamma(1,1,2);
但是当我试着去做的时候
np.dot(y2,lambda_[0])
或其转置版本:
np.dot(y2,lambda_[0].T)
我得到了错误值error:矩阵没有对齐
现在我明白了,我可以通过使用numpy矩阵来避免这个错误,但是转换成np.matrix不是很低效吗?我是python新手,所以可能我错了。试着写尽可能快的代码。
y2
的形状是(50,1)
,而lambda_0;[0]
的形状是(2,)
,因此dot()
将其视为矩阵向量乘法,并因此抛出一个错误。如果希望将第二个参数视为(1,2)
矩阵,则需要对其进行重塑:
np.dot(y2,lambda_[0].reshape(1,2))
或者,也可以使用lambda\uz
的二维视图,而不是一维视图:
np.dot(y2,lambda_[0:1])
虽然有了numpy,这太容易了。您可以按如下方式使用python
def array_mult(A, B):
if len(B) != len(A[0]) and len(A) != len(B[0]):
return 'Invalid'
result = [[0 for x in range(len(B[0]))] for y in range(len(A))]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
result[i][j] += A[i][k] * B[k][j]
return result
即使使用
矩阵
,阵列也必须具有兼容的形状。考虑到y2是50x1,lambda_0]是1x2矩阵,它们是兼容的形状,因为矩阵数学是正确的。我希望转置至少能起作用。如果lambda\uuu
是一个matrix
它的[0]
将是(1,2)
且兼容的。但是数组
表单在索引时失去了一个维度。出于好奇,您认为将y2和lambda_u重新命名为np.matrix()类型会减慢它的速度吗?i、 e.重铸10000x1数组会比重铸10x1数组慢吗?我知道重塑()
会创建一个视图,因此它不依赖于数组的大小(因为它实际上不会复制任何数据)。如果matrix
的行为相同(这是可能的),那么它也不应该太慢。但是我看不到在这里(或者在其他任何地方,因为Python3.5已经有了点运算符)使用matrix有什么好处。