矩阵乘法中的 ValueError

ValueError in matrix multiplication

这真的很基础,但我的代码中遇到了矩阵乘法的一些问题。

根据 np.matmul(x1,x2) 文档 --> 如果 x1 和 x2 具有形状 (n,k) 和 (k,m) 那么输出是签名 (n,k ),(k,m)->(n,m)。 我有 2 个上面提到的类似签名的数组,但是当我使用 np.matmul 时,我得到一个 "Shape of passed values is (1004, 20), indices imply (1004, 1)"

的 valueError

test1 = pd.DataFrame(np.random.randint(0,10, size=(1004,1)))
test2 = pd.DataFrame(np.ones([1,20]))

np.matmul(test1,test2)

我希望看到大小为 (1004,20) 的输出数组。这里有什么问题吗? 提前致谢

您必须使用 np.matmul(test1.values, test2.values) 从数据帧中删除索引信息并为您提供实际值的 numpy 数组。

如果你不调用 pandas:

,我可以让代码工作
import numpy as np

test1 = np.random.randint(0,10, size=(1004,1)) 
test2 = np.ones([1,20]) 

output = np.matmul(test1,test2)        
print(output.shape) 

>>> (1004, 20)

同样,内置 pandas multiplication 为您提供正确的形状,(但很多 NaNs):

test1 = pd.DataFrame(np.random.randint(0,10, size=(1004,1))) 
test2 = pd.DataFrame(np.ones([1,20])) 

output = test1 * test2 

print(test1.shape) 
print(test2.shape) 
print(output.shape)

>>> (1004, 1)
>>> (1, 20)
>>> (1004, 20)

您的问题似乎来自对数据帧调用 numpy 函数。该错误似乎来自 ndarray 构造函数内部。这意味着 numpy 无法构建 np.matmul, perhaps because it was expecting input arrays. If you really want to mix the libraries like this, you can always grab the underlying ndarray that pandas uses, the DataFrame.values 中返回的 ndarray:

test1 = pd.DataFrame(np.random.randint(0,10, size=(1004,1))) 
test2 = pd.DataFrame(np.ones([1,20])) 

output_ndarray = np.matmul(test1.values, test2.values) 
print(output_ndarray.shape)(1004, 20)
>>> (1004, 20)