Here提到了追加到numpy数组不是一个好主意,因为它需要重新分配数组内存,并且会减慢代码的速度。同时也提到了一些如何避免的提示。我的目标是创建一个saw信号,类似于ASCII艺术:/\/\/\/\
。我已经结束了以下两个代码,我不知道哪一个更糟。第二种方法也使用itertools.islice
,这也不是它所讨论的世界速度记录器here。这两个代码混合了标准的python列表和numpy数组。有没有一种方法可以实现同样的但使用纯numpy数组?或者更好:有没有什么通用规则可以在任何地方用list.append
代替numpy?正如我在第一页上所说的,我提到了一些提示,但我无法找到可行的解决办法。我一直在考虑列表理解之类的东西,它允许我先扩展saw
数组,然后再传递给np.hstack
,但我不认为这是可能的。我也在考虑首先用numpy.empty(400)
或np.zeros(400)
声明numpy数组,但我不知道如何正确地为它们分配更多的值,而且似乎{
In [106]: x = np.zeros(10)
In [107]: x
Out[107]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [108]: y = np.empty(10)
In [109]: y
Out[109]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
1号
^{pr2}$第二
import numpy as np
from itertools import islice
import matplotlib.pyplot as plt
saw = []
for x in xrange(0, 4):
saw.append(np.hstack((np.linspace(0,1,50), np.linspace(1,0,50))))
saw2 = saw[0]
for x in islice(saw, 1, None, 1):
saw2 = np.append([saw2], [x])
plt.figure()
plt.plot(np.arange(saw2.size), saw2)
plt.show()
你的2个迭代的大小只有3。即构造一个
(400,)
的数组。这种迭代不需要太担心。在我可以把你的代码写为:
列表理解只是你的
saw
。在
^{pr2}$np.stack
(或np.concatenate
)接受一个列表(或列表或数组),因此不需要迭代列表,逐项连接。np.append
只是成对串联:使用}甚至更简单
np.tile
复制{或者更快一些(
tile
以类似的方式使用repeat)相关问题 更多 >
编程相关推荐