以下是我对从numpy数组中删除特定行的问题的解决方案。解决方案以一行代码的形式提供,如下所示:
# Remove the rows whose first item is between 20 and 25
A = np.delete(A, np.where( np.bitwise_and( (A[:,0]>=20), (A[:,0]<=25) ) )[0], 0)
并且基于纯numpy函数(np.bitwise_and, np.where, np.delete)实现。
A = np.array( [ [ 18, 6.215, 0.025 ],
[ 19, 6.203, 0.025 ],
[ 20, 6.200, 0.025 ],
[ 21, 6.205, 0.025 ],
[ 22, 6.201, 0.026 ],
[ 23, 6.197, 0.026 ],
[ 24, 6.188, 0.024 ],
[ 25, 6.187, 0.023 ],
[ 26, 6.189, 0.021 ],
[ 27, 6.188, 0.020 ],
[ 28, 6.192, 0.019 ],
[ 29, 6.185, 0.020 ],
[ 30, 6.189, 0.019 ],
[ 31, 6.191, 0.018 ],
[ 32, 6.188, 0.019 ],
[ 33, 6.187, 0.019 ],
[ 34, 6.194, 0.021 ],
[ 35, 6.192, 0.024 ],
[ 36, 6.193, 0.024 ],
[ 37, 6.187, 0.026 ],
[ 38, 6.184, 0.026 ],
[ 39, 6.183, 0.027 ],
[ 40, 6.189, 0.027 ] ] )
A = np.delete(A, np.where( np.bitwise_and( (A[:,0]>=20), (A[:,0]<=25) ) )[0], 0)
A = np.delete(A, np.where( np.bitwise_and( (A[:,0]>=30), (A[:,0]<=35) ) )[0], 0)
>>> A
array([[ 1.80000000e+01, 6.21500000e+00, 2.50000000e-02],
[ 1.90000000e+01, 6.20300000e+00, 2.50000000e-02],
[ 2.60000000e+01, 6.18900000e+00, 2.10000000e-02],
[ 2.70000000e+01, 6.18800000e+00, 2.00000000e-02],
[ 2.80000000e+01, 6.19200000e+00, 1.90000000e-02],
[ 2.90000000e+01, 6.18500000e+00, 2.00000000e-02],
[ 3.60000000e+01, 6.19300000e+00, 2.40000000e-02],
[ 3.70000000e+01, 6.18700000e+00, 2.60000000e-02],
[ 3.80000000e+01, 6.18400000e+00, 2.60000000e-02],
[ 3.90000000e+01, 6.18300000e+00, 2.70000000e-02],
[ 4.00000000e+01, 6.18900000e+00, 2.70000000e-02]])
col0=a[:,0]
和a[~((col0>=20) & (col0<=25) & (col0>=30) & (col0<=35))]
- Saullo G. P. Castro