Python ValueError:当使用matmul时,传递值的形状是(4999,1),索引意味着(49991128)

Python ValueError:当使用matmul时,传递值的形状是(4999,1),索引意味着(49991128),python,python-3.x,pandas,numpy,matrix,Python,Python 3.x,Pandas,Numpy,Matrix,为了练习使用matmul函数,我编写了相当基本的代码,尽管它尽可能简单,但它不起作用 import numpy as np import pandas as pd df = pd.DataFrame(np.random.randint(0,100,size=(4999, 1128))) tab = np.random.rand(1128) np.matmul(df,tab) 它给出了以下错误: Traceback (most recent c

为了练习使用matmul函数,我编写了相当基本的代码,尽管它尽可能简单,但它不起作用

    import numpy as np
    import pandas as pd

    df = pd.DataFrame(np.random.randint(0,100,size=(4999, 1128)))
    tab = np.random.rand(1128)
    np.matmul(df,tab)
它给出了以下错误:

     Traceback (most recent call last):
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/managers.py", line 1651, in create_block_manager_from_blocks
        placement=slice(0, len(axes[0])))]
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/blocks.py", line 3095, in make_block
        return klass(values, ndim=ndim, placement=placement)
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/blocks.py", line 87, in __init__
        '{mgr}'.format(val=len(self.values), mgr=len(self.mgr_locs)))
    ValueError: Wrong number of items passed 1, placement implies 1128

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "test2.py", line 9, in <module>
        np.matmul(df,tab)
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/generic.py", line 1909, in __array_wrap__
        return self._constructor(result, **d).__finalize__(self)
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/frame.py", line 424, in __init__
        copy=copy)
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 167, in init_ndarray
        return create_block_manager_from_blocks([values], [columns, index])
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/managers.py", line 1660, in create_block_manager_from_blocks
        construction_error(tot_items, blocks[0].shape[1:], axes, e)
      File "/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site-packages/pandas/core/internals/managers.py", line 1691, in construction_error
        passed, implied))
    ValueError: Shape of passed values is (4999, 1), indices imply (4999, 1128)
回溯(最近一次呼叫最后一次):
文件“/Users/jk/Documents/programowanie19/movie\u recommunication/venv/lib/python3.7/site packages/pandas/core/internal/managers.py”,第1651行,创建块管理器
放置=切片(0,透镜(轴[0]))]
文件“/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site packages/pandas/core/internal/blocks.py”,第3095行,在make_block中
返回klass(值,ndim=ndim,placement=placement)
文件“/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site packages/pandas/core/internal/blocks.py”,第87行,in_u_init__
“{mgr}.”格式(val=len(self.values),mgr=len(self.mgr_locs)))
ValueError:传递的项目数错误1,放置意味着1128
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“test2.py”,第9行,在
np.matmul(df,选项卡)
文件“/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site packages/pandas/core/generic.py”,第1909行,在数组中__
返回self.\u构造函数(结果,**d)。\u完成\u(self)
文件“/Users/jk/Documents/programowanie19/movie_recommendation/venv/lib/python3.7/site packages/pandas/core/frame.py”,第424行,in_u_init__
复制=复制)
文件“/Users/jk/Documents/programowanie19/movie_recommunication/venv/lib/python3.7/site packages/pandas/core/internal/construction.py”,第167行,在init_ndarray中
从块返回创建块管理器([值],[列,索引])
文件“/Users/jk/Documents/programowanie19/movie\u recommunication/venv/lib/python3.7/site packages/pandas/core/internal/managers.py”,第1660行,创建块管理器
构造错误(总项目,块[0]。形状[1],轴,e)
文件“/Users/jk/Documents/programowanie19/movie_recommunication/venv/lib/python3.7/site packages/pandas/core/internal/managers.py”,第1691行,施工错误
通过,暗示)
ValueError:传递值的形状为(4999,1),索引暗示(49991128)

两个矩阵的维数应匹配-df为(49991128)tab为(1128,1)。有人知道这里的问题是什么吗?

为什么在调用numpy版本之前将数据框在数据框中,为什么不使用原始对象进行计算?您需要知道,pandas是基于numpy构建的,但它提供的数据结构并不真正用于矩阵运算,所以我真的不能指望这会奏效。尝试使用类似于
d1=np.random.randint(0100,size=(49991128))
d2=np.random.rand(1128)
<代码>np.matmul(d1,d2)取而代之。对我来说,删除数据帧可以让示例正常工作。你能确认你的情况是否也是这样吗?事实证明,熊猫数据帧确实是问题所在。我用了熊猫圆点而不是numpy matmul,现在效果很好,谢谢
df@tab
也应该起作用(
df.dot(tab)
根据其文档是一样的)。无论哪种方式,熊猫都会控制计算。