python - Numpy: `arange` 的数组

标签 python numpy

有没有办法带...

>>> x = np.array([0, 8, 10, 15, 50]).reshape((-1, 1)); ncols = 5

……然后把它变成……

array([[ 0,  1,  2,  3,  4],
       [ 8,  9, 10, 11, 12],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [50, 51, 52, 53, 54]])

我能够用 np.apply_along_axis...

>>> def myFunc(a, ncols):
        return np.arange(a, (a+ncols))

>>> np.apply_along_axis(myFunc, axis=1, arr=x)

for 循环...

>>> X = np.zeros((x.size,ncols))
>>> for a,b in izip(xrange(x.size),x):
        X[a] = myFunc(b, ncols)

但是他们太慢了。有没有更快的方法?

提前致谢。

最佳答案

以下将执行此操作:

In [9]: x = np.array([0, 8, 10, 15, 50]).reshape((-1, 1))

In [10]: ncols = 5

In [11]: x + np.arange(ncols)
Out[11]: 
array([[ 0,  1,  2,  3,  4],
       [ 8,  9, 10, 11, 12],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [50, 51, 52, 53, 54]])

它将行向量添加到列向量并依赖于 broadcasting做剩下的事情。

这应该和任何事情一样快:生成一个 1000x1000 矩阵需要大约 1.6 毫秒:

In [17]: %timeit np.arange(1000).reshape((-1, 1)) + np.arange(1000)
1000 loops, best of 3: 1.61 ms per loop

关于python - Numpy: `arange` 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517114/

相关文章:

python - 如何避免使用 __setattr__ 和属性 setter 的递归循环?

python - 需要登录 Django 才能查看

python - 高效创建 0 和 255 的棋盘图案

python - 使用两个 DataFrame 的 Pandas groupby 总和

python - 如何使用不同的步骤迭代两个文件而不使用python将它们全部加载到内存中?

Python 标准输入文件名

python - 在二维数组上使用贝叶斯统计分析进行音频过滤的笨拙建议

python - 检查 numpy 数组中的所有行是否唯一

python - 逐元素乘以 2D NumPy 数组并求和

python - 如何用另一个数组创建或填充一个 numpy 数组?