Matlab代码:
AP(queryIdx) = diff([0;recall]')*prec
我的python代码:
AP[queryIdx] = np.dot(np.diff(np.concatenate(([[0]], recall), axis=0).transpose()),prec)
变量:(经过检查,我确信它们在python和Matlab中是等效的)
Recall: 1000x1 np array*
prec: 1000x1 np array
*打印为[.],…,[.]]
结果: Matlab:.1011 Python:0.05263158
我能想到的代码之外的唯一原因是python使用了更多 精确,但我怀疑这会有这么大的区别)
*编辑我的prec变量有问题。上面的代码起作用了
代码看起来有点乱。尝试将其替换为:
在您的帖子中,您提到您有一个1000 x 1的数组,用于
recall
和prec
。在我看来,这是一个二维数组,具有一个单一维度:第二维度。因此,您需要使用ravel
将其转换回1D数组。你知道吗现在,
np.hstack
水平地将1D数组堆叠在一起,因此这将在前面附加一个0,然后应用diff
操作符,并用prec
执行点积。你知道吗MATLAB编码器在
numpy
中的一个常见问题是numpy
中一维数组的表示。没有一维数组的转置。所有numpy
1D数组都是行向量。如果您显式地想使1D数组成为一个列向量,则需要包含一个额外的维度,并使第二个维度为1,然后将其转置。像这样:无论如何,让我们验证一下结果:
MATLAB软件
Python(IPython)
相关问题 更多 >
编程相关推荐