numpy 显示ValueError:形状(1,3)和(1,3)未对齐:3(暗淡1)!= 1(暗0)

uqdfh47h  于 2023-08-05  发布在  其他
关注(0)|答案(6)|浏览(115)

我尝试使用以下矩阵并执行点积,如代码所示。我检查了矩阵的大小,它是(1,3),但它扔给我的点积错误。

import numpy as np 

b0 = np.matrix(np.random.rand(3))
n1 = np.cross(b0, b0)
print(np.shape(n1))

y = np.dot(n1, n1)

字符串

p4rjhz4m

p4rjhz4m1#

将矩阵转换为数组

n12 = np.squeeze(np.asarray(n2))

X12 = np.squeeze(np.asarray(x1))

字符串
解决了这个问题

2fjabf4q

2fjabf4q2#

第一个矩阵的列和第二个矩阵的行应该是相等的,顺序应该只像这样

column of first matrix = row of second matrix

字符串
并且不遵循以下步骤

row of first matrix  = column of second matrix


它将抛出错误

atmip9wb

atmip9wb3#

与标准算术不同,它需要匹配的维度,点积要求维度是以下之一:

  • (X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C),其中...表示“0个或多个不同的值
  • (B,) dot (B, C) -> (C,)
  • (A, B) dot (B,) -> (A,)
  • (B,) dot (B,) -> ()

你的问题是你正在使用np.matrix,这在你的代码中是完全不必要的--np.matrix的主要目的是将a * b转换为np.dot(a, b)。一般来说,np.matrix可能不是一个好的选择。

ckocjqey

ckocjqey4#

numpy.dot(a, b, out=None)

字符串
两个数组的点积。
对于N维,它是a的最后一个轴和b的倒数第二个轴的和积。
文件:numpy.dot的数据。

acruukt9

acruukt95#

解:将n2的转置输入点积:
第一个月
要使点积有效,输入矩阵的维数必须满足一定的条件:第一矩阵的列的大小=第二矩阵的行的大小。
你有两个维度为(1,3)的矩阵:x1.shape => (1,3), n2.shape => (1,3)。按照上面的规则,您需要x1.shape => (1,3), n2.shape => (3,1)。这很容易通过取n2的转置来实现,如上所示。

jdg4fx2g

jdg4fx2g6#

使用statsmodels时也可能出现此错误。内生变量是statsmodels.api.OLS中的第一个位置参数,因此打乱顺序会显示此错误。比如说,

import statsmodels.api as sm

x = [[1,2,3]]*100
y = [1,2]*50
model = sm.OLS(x, y).fit()     # <---- ValueError
model.summary()

# ValueError: shapes (100,3) and (100,3) not aligned: 3 (dim 1) != 100 (dim 0)

字符串
按正确顺序传递参数可解决此错误:

model = sm.OLS(y, x).fit()     # <---- OK
#              ^^^^       <---- change the order of `y` and `x`
model.summary()

相关问题