我试图在numpy中复制Matlab中的dyadup函数。有比这更有效的方法吗np.插入()? 你知道吗
import numpy as np
def dyadup(a, level=1, even=False):
if even == False:
start = 1
end = len(a) + 1
else:
start = 0
end = len(a)
x = a
for l in range(level):
x = np.insert(x, range(start, end), 0)
return x
用一个1024元素的初始数组快速计时,我得到了每个循环14.2usec的最佳时间,这还不错,但我想知道是否可以做得更好。你知道吗
谢谢!你知道吗
更有效的方法是:
更多细节
让我把这个分解一下。你知道吗
在python(类似于Matlab)中,我们可以通过切片操作引用或提取有规则间隔的项目。例如:
我们还可以使用它将项分配给数组:
因此,我们可以这样做:
对于大型数组,这比使用
insert
要有效得多,因为每次调用insert
时都会生成数组的副本。你知道吗时机
以时差为例
请注意micro和milli。新的实现速度快了约100倍。你知道吗
进一步考虑
另外,注意不要修改您的输入。在python中
x = a
不复制a
。x
是同一个对象,因此对x
的任何修改也是对a
的修改。你知道吗在这个特定的例子中,
np.insert
生成一个副本,这样您就不会修改您的输入,但在其他情况下您会这样做。你知道吗最后一点,如果我正确理解了原始函数的意图,那么
level
大于1就是不正确的。你知道吗例如:
与
之所以会出现这种差异,是因为您在迭代时修改了某些内容,但在插入时引用了原始项的索引。不过,我可能误解了你的意图。你知道吗
相关问题 更多 >
编程相关推荐