如下面的示例数组,您如何按列切片以获得以下内容(例如第3列)[0, 0, ..., 1338, 1312, 1502, 0, ...]
寻找最有效的方式,谢谢!
>>> r
array([[[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 0, 0, 1338],
[ 0, 0, 1312],
[ 0, 0, 1502],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 0, 0, 1400],
[ 0, 0, 1277],
[ 0, 0, 1280],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]]], dtype=uint16)
答案 0 :(得分:9)
对于任何维度的通用ndarray,一种方法是 -
arr[...,n]
要获得展平版本,请使用.ravel()
方法 -
arr[...,n].ravel()
示例运行 -
In [317]: arr
Out[317]:
array([[[[2, 1, 2],
[0, 2, 3],
[1, 0, 1]],
[[0, 2, 0],
[3, 1, 2],
[3, 3, 1]]],
[[[2, 0, 0],
[0, 2, 3],
[3, 3, 1]],
[[2, 0, 1],
[2, 3, 0],
[3, 3, 2]]]])
In [318]: arr[...,2].ravel()
Out[318]: array([2, 3, 1, 0, 2, 1, 0, 3, 1, 1, 0, 2])
答案 1 :(得分:2)
Numpy支持"分号符号"喜欢matlab。
在您的情况下,您应该能够通过以下方式获取第三列:
x = r[:,:,2]
然后
a = numpy.concatenate([x[0],x[1],x[2]])