在我理解Numpy.correlate()
函数如何实际工作的路上,我在纯Python中实现它,但我看到的是非常令人失望的:
def correlate(a, v, mode='valid', old_behavior=False):
mode = _mode_from_name(mode)
if old_behavior:
warnings.warn("""Warning.""", DeprecationWarning)
return multiarray.correlate(a, v, mode)
else:
return multiarray.correlate2(a, v, mode)
所以我开始寻找multiarray.correlate2(a, v, mode)
函数的实现,但不幸的是我找不到它。我只想说,我正在寻找它,因为我试图自己实现自相关函数,而且我错过了与mode='full'
中Numpy.correlate()
参数类似的功能将结果作为1D数组返回。提前谢谢你的帮助。
答案 0 :(得分:7)
与其他语言(如c)相比,python代码的速度可能非常低。 numpy
旨在为数组提供高性能的操作,因此开发人员决定在c
中实现一些操作。
不幸的是,在correlate
的代码库中找不到numpy
的python实现,但如果您熟悉C
和python
的扩展模块,您可以找到相关代码here。
不同的模式只指定输出数组的长度。 您可以通过转换输入来模拟它们:
import numpy as np
a = [1, 2, 3]
v = [0, 1, 0.5]
np.correlate(a, v, mode="full")
返回:
array([ 0.5, 2. , 3.5, 3. , 0. ])
使用零填充v
可以获得相同的结果:
np.correlate(a, [0, 0] + v + [0, 0])
返回相同的结果:
array([ 0.5, 2. , 3.5, 3. , 0. ])
答案 1 :(得分:0)
else if (args [0] === 'time') { //Edits time at which embed is posted
eventschedule.reschedule(message.content.slice(16))
console.log(eventschedule)
return message.channel.send(`Embed post time changed successfully to ${message.content.slice(16)}`);
找到了!它可能是私有API,在使用numpy.multiarray或新发现的“正确”名称进行首次搜索后找不到文档。 最佳搜索查询是“ np.core.multiarray.correlate2 github”
np.core.multiarray.correlate2
dir(np.core.multiarray.correlate2) # to inspect
print (numpy.__version__)
print numpy.__version__ # python 2
如果您打算根据自己的目的自定义代码,请当心。
return multiarray.correlate2(a, v, mode) # mode is int data type
如果这是您在代码库中的第一个漏洞,并且您正在最后期限,请不要与内部API混淆。对我来说太迟了。