有没有办法......
>>> x = np.array([0, 8, 10, 15, 50]).reshape((-1, 1)); ncols = 5
Run Code Online (Sandbox Code Playgroud)
......把它变成......
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]])
Run Code Online (Sandbox Code Playgroud)
我能够用np.apply_along_axis... 做到这一点
>>> def myFunc(a, ncols):
return np.arange(a, (a+ncols))
>>> np.apply_along_axis(myFunc, axis=1, arr=x)
Run Code Online (Sandbox Code Playgroud)
和for循环......
>>> X = np.zeros((x.size,ncols))
>>> for a,b in izip(xrange(x.size),x):
X[a] = myFunc(b, ncols)
Run Code Online (Sandbox Code Playgroud)
但它们太慢了.有更快的方法吗?
提前致谢.
以下将这样做:
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]])
Run Code Online (Sandbox Code Playgroud)
它向列向量添加行向量,并依赖于广播来完成剩下的工作.
这应该和任何东西一样快:产生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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |