我有这个数组:
arr = np.array([[[ -1., -1., -1., 0., 0., 0.],
[ 0.1, 0.1, 0.1, 2., 3., 4.]], # <-- this one
[[ -1., -1., -1., 0., 0., -1.],
[ 0.1, 0.1, 0.1, 16., 17., 0.1]], # <-- and this one
[[ -1., -1., -1., 0., 0., 0.],
[ 0.1, 0.1, 0.1, 4., 5., 6.]], # <-- and this one
[[ 0., 0., 0., -1., 0., 0.],
[ 1., 2., 3., 0.1, 1., 2.]], # <-- and this one
[[ -1., -1., 0., 0., 0., 0.],
[ 0.1, 0.1, 1., 9., 10., 11.]]]) # <-- and the last one
我想在每个数组中提取第二个数组,结果如下:
res = [[ 0.1, 0.1, 0.1, 2., 3., 4.],
[ 0.1, 0.1, 0.1, 16., 17., 0.1],
[ 0.1, 0.1, 0.1, 4., 5., 6.],
[ 1., 2., 3., 0.1, 1., 2.],
[ 0.1, 0.1, 1., 9., 10., 11.]]
我想在一行代码中获取res
,我试过这个但是没有用
arr[:][1] # select the element 1 in each array
# I got
array([[ -1. , -1. , -1. , 0. , 0. , -1. ],
[ 0.1, 0.1, 0.1, 16. , 17. , 0.1]])
任何人都可以解释原因吗?
我找到的唯一解决方案是明确指出我不喜欢的每个索引(arr[0][1]...
)。
答案 0 :(得分:5)
这是一个3D
数组,您正在尝试选择第二个轴的第二个元素并沿其余轴提取所有元素。所以,它就像 -
arr[:,1,:]
我们可以跳过列出尾随轴的:
,因此它进一步简化为 -
arr[:,1]
示例运行 -
In [360]: arr
Out[360]:
array([[[ -1. , -1. , -1. , 0. , 0. , 0. ],
[ 0.1, 0.1, 0.1, 2. , 3. , 4. ]],
[[ -1. , -1. , -1. , 0. , 0. , -1. ],
[ 0.1, 0.1, 0.1, 16. , 17. , 0.1]],
[[ -1. , -1. , -1. , 0. , 0. , 0. ],
[ 0.1, 0.1, 0.1, 4. , 5. , 6. ]],
[[ 0. , 0. , 0. , -1. , 0. , 0. ],
[ 1. , 2. , 3. , 0.1, 1. , 2. ]],
[[ -1. , -1. , 0. , 0. , 0. , 0. ],
[ 0.1, 0.1, 1. , 9. , 10. , 11. ]]])
In [361]: arr[:,1]
Out[361]:
array([[ 0.1, 0.1, 0.1, 2. , 3. , 4. ],
[ 0.1, 0.1, 0.1, 16. , 17. , 0.1],
[ 0.1, 0.1, 0.1, 4. , 5. , 6. ],
[ 1. , 2. , 3. , 0.1, 1. , 2. ],
[ 0.1, 0.1, 1. , 9. , 10. , 11. ]])
答案 1 :(得分:2)
我对numpy一无所知,所以可能有一种更简单的方法。但是一个简单的列表理解就可以了:
[a[1] for a in arr]