Matlab Python翻译错误

Matlab Python翻译错误,python,matlab,numpy,Python,Matlab,Numpy,Matlab代码: AP(queryIdx) = diff([0;recall]')*prec AP[queryIdx] = np.dot(np.diff(np.concatenate(([[0]], recall), axis=0).transpose()),prec) 我的python代码: AP(queryIdx) = diff([0;recall]')*prec AP[queryIdx] = np.dot(np.diff(np.concatenate(([[0]], recall)

Matlab代码:

AP(queryIdx) = diff([0;recall]')*prec
AP[queryIdx] = np.dot(np.diff(np.concatenate(([[0]], recall), axis=0).transpose()),prec)
我的python代码:

AP(queryIdx) = diff([0;recall]')*prec
AP[queryIdx] = np.dot(np.diff(np.concatenate(([[0]], recall), axis=0).transpose()),prec)
变量:(经过检查,我确信它们在python和Matlab中是等效的)

*打印为[[.],[.],[.]]

结果: Matlab:.1011 Python:0.05263158

在代码之外我能想到的唯一原因是python使用了更多 精确,但我怀疑这会造成如此大的差异)


*编辑我的prec变量有问题。上面的代码运行正常

该代码看起来有点凌乱。尝试将其替换为以下内容:

AP[queryIdx] = np.dot(np.diff(np.hstack([0, recall.ravel()])), prec.ravel())
在您的帖子中,您提到您有一个1000 x 1的数组,用于
调用
预处理
。对我来说,这被解释为一个二维数组,具有一个单一维度:第二维度。因此,您需要使用
ravel
将其转换回一维数组

现在,
np.hstack
将1D数组水平堆叠在一起,因此这将在前面附加一个0,然后应用
diff
操作符,并使用
prec
执行点积

MATLAB程序员在
numpy
中的一个常见问题是在
numpy
中表示一维数组。没有一维数组的转置。所有
numpy
1D数组都是行向量。如果明确希望将1D数组设为列向量,则需要包含一个附加维度,并将第二个维度设为1,然后将其转置。大概是这样的:

r = v[:][None].T

无论如何,让我们验证一下结果:

MATLAB Python(IPython)
这可能与matlab和python如何在
diff
操作符中处理边界条件有关。在matlab中,'是共轭转置。@imaluengo-matlab和
numpy
compute
diff
对于1D数组的相同方式。@seb使用
.conj().transpose()
也不起作用:(然后提供一个最简单的例子,我只能通过重塑召回来使用hstack:
np.hstack([0,recall.restrape((10000,)]))
。这可能是因为你所说的,给了我同样的错误答案。@user5046480-你没有告诉我,
recall
是一个带有单态维度的2D数组。不管怎样,我都不确定还有什么错。对不起。如果你想让我进一步帮助,请给我们你用来重建错误的数据。@user5046480-有兴趣吗ing。你接受了我的回答。谢谢!发生了什么事?你是怎么解决的?
In [1]: import numpy as np

In [2]: recall = np.arange(1,1001)

In [3]: prec = np.arange(1000,0,-1)

In [4]: np.dot(np.diff(np.hstack([0, recall.ravel()])), prec.ravel())
Out[4]: 500500