(我不确定标题的正确性)
我有一个numpy.array
f
,如下所示:
# id frame x y z
我想要做的是提取某些特定id
的轨迹。对于id==1
,我得到了例如:
f_1 = f[ f[:,0]==1 ]
并获取
array([[ 1. , 55. , 381.51 , -135.476 , 163.751 ],
[ 1. , 56. , 369.176 , -134.842 , 163.751 ],
[ 1. , 57. , 357.499 , -134.204 , 163.751 ],
[ 1. , 58. , 346.65 , -133.786 , 163.751 ],
[ 1. , 59. , 336.602 , -133.762 , 163.751 ],
[ 1. , 60. , 326.762 , -135.157 , 163.751 ],
[ 1. , 61. , 315.77 , -135.898 , 163.751 ],
[ 1. , 62. , 303.806 , -136.855 , 163.751 ],
[ 1. , 63. , 291.273 , -138.255 , 163.751 ],
[ 1. , 64. , 278.767 , -139.824 , 163.751 ],
[ 1. , 65. , 266.778 , -141.123 , 163.751 ],
[ 1. , 66. , 255.773 , -142.42 , 163.751 ],
[ 1. , 67. , 244.864 , -143.314 , 163.751 ]])
我的问题是我不确定我是否理解它是如何工作的。通常我期待的是:
f_1 = f[ f[:,0]==1, : ]
这对我来说也很有意义。 (取所有列,但只列出满足所需条件的行)
有人可以解释为什么这种形式也有效以及究竟会发生什么?
f_1 = f[ f[:,0]==1 ]
答案 0 :(得分:1)
对于只询问一个索引的2D数组,返回与该索引对应的行(包含所有列),以便:
np.all( a[0] == a[0,:] )
#True
执行a[0]==1
时会得到一个布尔数组,如:
b = a[0]==1
#array([True, True, False, False, True], dtype=bool)
您可以通过花式索引来获取其索引在True
中具有相应b
值的所有行。在这个例子中,做:
c = a[ b ]
将获得与索引[0,1,4]
对应的行。通过直接传递这些索引可以获得相同的结果,例如c = a[ [0,1,4] ]
。
答案 1 :(得分:0)
...当提供的索引数少于轴数时,缺失的索引将被视为完整切片......
因此f[f[:,0]==1]
被转换为f[f[:,0]==1,:]
(或等效地转移到f[f[:,0]==1,...]
),这些都是程序员所有相同的事情。透视图。