218*_*218 3 python arrays numpy
我正在使用以下代码来创建数组的索引列表.但是,我希望索引以Fortran顺序运行,即内部循环是更快变化的循环.有没有办法在python中实现这一点.目前,我得到的输出是C顺序.
np.transpose(np.nonzero(np.ones([32,30])))
Run Code Online (Sandbox Code Playgroud)
输出:
array([[ 0, 0],
[ 0, 1],
[ 0, 2],
...,
[31, 27],
[31, 28],
[31, 29]])
Run Code Online (Sandbox Code Playgroud)
但是,我需要以下形式的ouptut:
array([[ 0, 0],
[ 1, 0],
[ 2, 0],
...,
[29, 29],
[30, 29],
[31, 29]])
Run Code Online (Sandbox Code Playgroud)
您可以使用转换生成这些索引,np.indices然后转换并重塑该作业 -
np.indices((32,30)).T.reshape(-1,2)
Run Code Online (Sandbox Code Playgroud)
样品输出 -
In [36]: np.indices((32,30)).T.reshape(-1,2)
Out[36]:
array([[ 0, 0],
[ 1, 0],
[ 2, 0],
...,
[29, 29],
[30, 29],
[31, 29]])
Run Code Online (Sandbox Code Playgroud)
运行时测试 -
In [74]: points = [32,30]
# @218's soln
In [75]: %timeit np.transpose(np.nonzero(np.ones(points[::-1])))[:,::-1]
100000 loops, best of 3: 18.6 µs per loop
In [76]: %timeit np.indices((points)).T.reshape(-1,2)
100000 loops, best of 3: 16.1 µs per loop
In [77]: points = [320,300]
# @218's soln
In [78]: %timeit np.transpose(np.nonzero(np.ones(points[::-1])))[:,::-1]
100 loops, best of 3: 2.14 ms per loop
In [79]: %timeit np.indices((points)).T.reshape(-1,2)
1000 loops, best of 3: 1.26 ms per loop
Run Code Online (Sandbox Code Playgroud)
进一步提升性能
我们可以通过翻转进一步优化它points用np.indices,然后使用np.column_stack以创建最终2列阵列.让我们来反对已经提出的问题进行验证.列出以下两种方法 -
def app1(points):
return np.indices((points)).T.reshape(-1,2)
def app2(points):
R,C = np.indices((points[::-1]))
return np.column_stack((C.ravel(), R.ravel()))
Run Code Online (Sandbox Code Playgroud)
计时 -
In [146]: points = [32,30]
In [147]: np.allclose(app1(points), app2(points))
Out[147]: True
In [148]: %timeit app1(points)
100000 loops, best of 3: 14.8 µs per loop
In [149]: %timeit app2(points)
100000 loops, best of 3: 17.4 µs per loop
In [150]: points = [320,300]
In [151]: %timeit app1(points)
1000 loops, best of 3: 1.1 ms per loop
In [152]: %timeit app2(points)
1000 loops, best of 3: 822 µs per loop
Run Code Online (Sandbox Code Playgroud)
所以,这个更大的形状更好.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |