簡體   English   中英

Numpy:`arange`s的數組

[英]Numpy: Array of `arange`s

有沒有辦法......

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

它向列向量添加行向量,並依賴於廣播來完成剩下的工作。

這應該和任何東西一樣快:產生1000x1000矩陣需要大約1.6ms:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM