我有一个python脚本正在从3D数组中读取切片,如下所示:
def get_from_array(axis, start, end, array):
if axis == 0:
slice = array[start:end, :, :]
elif axis == 1:
slice = array[:, start:end, :]
elif axis == 2:
slice = array[:, :, start:end]
return slice
我不禁想到必须有更好的方法来做到这一点!有什么建议吗?
取值
答案 0 :(得分:5)
您可以这样做:
idx = [slice(None)] * array.ndim
idx[axis] = slice(start, end)
myslice = array[tuple(idx)]
答案 1 :(得分:2)
您也可以使用np.take
。然后你可以更自然地在一行中完成它。
a.take(np.arange(start,end), axis=axis)
注意:
:
切片表示法,而是将其替换为range
例如:
In [135]: a = np.arange(3*3*3).reshape(3,3,3)
In [136]: a.take(np.arange(1,2), axis=1)
Out[136]:
array([[[ 3, 4, 5]],
[[12, 13, 14]],
[[21, 22, 23]]])