我试图测试在Matrix search operation using numpy and pandas上给出的相同示例
在3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux
上,使用python 2.7.3, numpy 1.9.2 and pandas 0.15.2
举个小例子:
ds1 = [[ 4, 13, 6, 9],
[ 7, 12, 5, 7],
[ 7, 0, 4, 22],
[ 9, 8, 12, 0]]
ds2 = [[ 4, 1],
[ 5, 3],
[ 6, 1],
[ 7, 2],
[ 8, 2],
[ 9, 3],
[12, 1],
[13, 2],
[22, 3]]
ds1= pd.DataFrame(ds1)
ds2= pd.DataFrame(ds2)
C = np.where(ds1.values.ravel()[:, None] == ds2.values[:, 0])
print C
给出错误的结果
^{pr2}$预期输出
output = [[1, 2, 1, 3],
[2, 1, 3, 2],
[2, 0, 1, 3],
[3, 2, 1, 0]]
在处理大矩阵值的时候
ds1 = pd.read_table('https://gist.githubusercontent.com/karimkhanp/9527bad750fbe75e072c/raw/ds1', sep=' ', header=None)
ds2 = pd.read_table('https://gist.githubusercontent.com/karimkhanp/1692f1f76718c35e939f/raw/6f6b348ab0879b702e1c3c5e362e9d2062e9e9bc/ds2', header=None, sep=' ')
C = np.where(ds1.values.ravel()[:, None] == ds2.values[:, 0])
print C
它给予
(1000, 1001) (4000, 2)
(array([], dtype=int32),)
而不是替换的矩阵值。在
任何建议都会很有帮助。在
我同意@Anthony Lethuillier的回答,我猜}是一个只包含1个元素的元组,因此当您访问
IndexError
可能是由不同的版本引起的。似乎是在@nlper的情况下,C
是(array([], dtype=int32),)
,这意味着在ds1.values.ravel()[:, None] == ds2.values[:, 0]
中找不到任何东西,这明显不同于@Anthony。没有发现任何内容,因此{C[1]
时会触发IndexError
。在这也适用于我的机器,所以我不知道为什么},看看为什么没有什么是相等的。在
C
是空的。我建议您详细打印ds1.values.ravel()
和{此外,我使用了python2.7.9、numpy 1.9.2和pandas 0.16.1
C中的第二个数组(array([0,7,2,5,3,6,1,3,3,0,8,5,4,6])给出了要在ds1中替换的值的位置。在
所以必须替换ds1中的值。值.ravel()第一个C数组的索引,ds2中的值,第二个C数组的索引
下面是为小示例提供正确输出的代码:
给出以下输出:
^{pr2}$相关问题 更多 >
编程相关推荐