Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy中的矩阵乘法错误_Python_Numpy - Fatal编程技术网

Python 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矩阵来避免这个错误,

我有以下两个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有什么好处。