(我不确定标题是否正确)
我有一个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 ]
2条答案
按热度按时间uyto3xhc1#
对于只要求一个索引的二维数组,返回与该索引对应的行(包含所有列),因此:
当你执行
a[0]==1
时,你会得到一个布尔数组,比如:您可以使用它通过花哨的索引来获取其索引在
b
中具有对应True
值的所有行。将得到对应于索引
[0,1,4]
的行。通过直接传递这些索引可以得到相同的结果,如c = a[ [0,1,4] ]
。sr4lhrrt2#
引用Tentative Numpy Tutorial:
...当提供的索引少于轴数时,丢失的索引被视为完整切片...
因此,
f[f[:,0]==1]
被转换为f[f[:,0]==1,:]
(或者等价地,转换为f[f[:,0]==1,...]
),从程序员的Angular 来看,这是完全相同的。