In [487]: timeit x[[50],:]
100000 loops, best of 3: 10.3 µs per loop # slowest
In [488]: timeit x[50:51,:]
100000 loops, best of 3: 2.24 µs per loop # slice indexing is fast
In [489]: timeit x[50,:].reshape(1,-1)
100000 loops, best of 3: 3.29 µs per loop # minimal time penalty
In [490]: timeit x[50,:][None,:]
100000 loops, best of 3: 3.55 µs per loop
In [543]: timeit x[None,50,:] # **best**
1000000 loops, best of 3: 1.76 µs per loop
复制的一个测试是将数据缓冲区指针与原始指针进行比较。
In [492]: x.__array_interface__['data']
Out[492]: (175920456, False)
In [493]: x[50,:].__array_interface__['data']
Out[493]: (175940456, False)
In [494]: x[[50],:].__array_interface__['data']
Out[494]: (175871672, False) # different pointer
In [495]: x[50:51,:].__array_interface__['data']
Out[495]: (175940456, False)
In [496]: x[50,:][None,:].__array_interface__['data']
Out[496]: (175940456, False)
使索引成为切片、列表或数组
但是
reshape
没有什么问题,除了它需要输入。不慢。[None,:]
是一个很好的速记。使用列表索引可能最短,但它确实会产生一个副本(加号还是减号?)而且速度较慢
对于
(100,100)
整数数组:复制的一个测试是将数据缓冲区指针与原始指针进行比较。
这个又好又简单的方法怎么样?
您可以在一次操作中切片和插入新轴。例如,这里有一个二维数组:
要分割单个列(返回形状数组
(2, 1)
),请使用None
作为第三维度进行切片:要分割单个行(返回形状数组
(1, 3)
),请使用None
作为第二维度进行切片:相关问题 更多 >
编程相关推荐