python - 如何重写使用 numpy 数组附加到列表的代码

标签 python arrays numpy

Here提到附加到 numpy 数组不是一个好主意,因为它需要重新分配数组内存并且会减慢代码速度。还提到了一些如何避免它的提示。我的目标是创建一个锯齿信号,类似于 ASCII 艺术:/\/\/\/\。我最终得到了以下两个代码,但我不知道哪一个更糟糕。第二个还使用了 itertools.islice ,它也不是它所讨论的世界速度记录器 here 。两个代码都混合了标准 python 列表和 numpy 数组。有没有办法如何实现相同但使用纯 numpy 数组?或者更好:是否有任何通用规则可以在任何地方使用 numpy 来使用 list.append 代替?正如我在第一页所说的,提到了一些提示,但我无法找出可行的解决方案。我一直在考虑像列表理解这样的东西,它允许我首先扩展 saw 数组,然后我可以将其传递给 np.hstack 但我认为这是不可能的。我也一直在考虑首先使用 numpy.empty(400) 或 np.zeros(400) 声明 numpy 数组,但我不知道如何正确分配给它们更多值,似乎 np.empty 并不是那么完全空,因为它包含零值:

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.])

第一

import numpy as np
import matplotlib.pyplot as plt

saw = []
for x in xrange(0, 3):
  saw.append(np.hstack((np.linspace(0,1,50), np.linspace(1,0,50))))
saw2 = saw[0]
for x in saw:
  saw2 = np.append([saw2], [x])
plt.figure()
plt.plot(np.arange(saw2.size), saw2)
plt.show()

第二

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,) 数组。这种迭代不需要太担心。

我可以通过编写以下内容来清理您的代码:

xup=np.linspace(0,1,50)
xdn=np.linspace(1,0,50)
x=np.hstack([xup,xdn])
saw2 = np.hstack([x for _ in range(4)])

列表理解只是您的

np.stack(或np.concatenate)采用一个列表(或多个列表或数组),因此无需迭代列表,执行连接项按项目。 np.append 只是一个成对连接:

 np.append(saw2,x) == np.concatenate([saw2,x])

使用np.tile复制x就更简单了

saw2 = np.tile(x,4)

或者更快一点的东西(tile以类似的方式使用重复)

saw2 = x[None,:].repeat(4,0).flatten()

关于python - 如何重写使用 numpy 数组附加到列表的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724279/

相关文章:

python - 在 Python 中随机改组字典

python - 如何在同一个类的另一个方法中调用一个方法的变量

javascript - Ajax - JQuery,数组到查询字符串

c++ - BST只能找到第一个节点

python - 如何在 numpy 二维数组中存储列表?

python - 如果满足某些 GroupBy 条件,则从原始 Pandas 数据框中删除行

python - Numpy高效矩阵自乘(gram矩阵)

c - 用户输入 C 中数组的大小

python - numpy数组转入matlab

python - 如何在 tensorflow 服务中传递单个图像?