我将数字数据存储在两个数据帧x和y中。numpy的内部产品有效,但pandas的dot产品无效
[63]on
:x.shape
Out[63]:(1062,36)
In[64]:y形
Out[64]:(36,36)
In[65]:np.内(x,y).形
Out[65]:(1062L,36L)
In[66]:x.dot(y)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
<;ipython-input-66-76c015be254b>;在<;模块>;()
----&燃气轮机;1 x点(y)
C:\Programs\WinPython-64bit-2.7.3.3\python-2.7.3.amd64\lib\site packages\pandas\core\frame.pyc(自身,其他)
888如果(len(普通)>;len(自列)或
889 len(普通)和gt;len(其他索引)):
--&燃气轮机;890提升值错误('矩阵未对齐')
891
892 left=self.reindex(列=common,副本=False)
ValueError:矩阵未对齐
这是一个错误还是我用熊猫错了
不仅x和y的形状必须正确,而且
x的列名必须与y的索引名匹配。否则
pandas/core/frame.py中的此代码将引发ValueError:
如果存在(其他,(系列,数据帧)):
common=self.columns.union(其他.index)
if(len(公共)>;len(自列)或
len(普通)>;len(其他索引)):
raise VALUERROR('矩阵未对齐')
如果只想计算矩阵积,而不使x的列名与y的索引名匹配,则使用NumPy dot函数:
np.dot(x,y)
x的列名必须与y的索引名匹配的原因是,pandasdot方法将重新索引x和y,因此如果x的列顺序与y的索引顺序不自然匹配,在执行矩阵积之前,将使其匹配:
left=self.reindex(columns=common,copy=False)
右=其他.reindex(索引=公共,副本=假)
NumPydot函数不做这样的事情。它将根据底层数组中的值计算矩阵积
下面是一个重现错误的示例:
将熊猫作为pd导入
将numpy作为np导入
columns=['col{}'。范围(36)中i的格式(i)]
x=pd.DataFrame(np.random.random((1062,36)),columns=columns)
y=pd.DataFrame(np.random.random((36,36)))
打印(np.点(x,y).形状)
# (1062, 36)
打印(x点(y)形状)
#ValueError:矩阵未对齐