Tôi muốn chỉ chọn một số hàng nhất định từ một mảng NumPy dựa trên giá trị trong cột thứ hai. Ví dụ, mảng kiểm tra này có số nguyên từ 1 đến 10 trong cột thứ hai.Chọn các hàng từ một số NumPy
>>> test = numpy.array([numpy.arange(100), numpy.random.randint(1, 11, 100)]).transpose()
>>> test[:10, :]
array([[ 0, 6],
[ 1, 7],
[ 2, 10],
[ 3, 4],
[ 4, 1],
[ 5, 10],
[ 6, 6],
[ 7, 4],
[ 8, 6],
[ 9, 7]])
Nếu tôi muốn chỉ hàng trong đó giá trị thứ hai là 4, nó rất dễ dàng:
>>> test[test[:, 1] == 4]
array([[ 3, 4],
[ 7, 4],
[16, 4],
...
[81, 4],
[83, 4],
[88, 4]])
Nhưng làm thế nào để đạt được kết quả tương tự khi có nhiều hơn một giá trị mong muốn?
Danh sách mong muốn có thể có độ dài tùy ý. Ví dụ, tôi có thể muốn tất cả các hàng nơi cột số thứ hai là 2, 4 hoặc 6:
>>> wanted = [2, 4, 6]
Cách duy nhất mà tôi đã đưa ra là sử dụng danh sách hiểu và sau đó chuyển đổi này trở lại vào một mảng và dường như quá phức tạp, mặc dù nó hoạt động:
>>> test[numpy.array([test[x, 1] in wanted for x in range(len(test))])]
array([[ 0, 6],
[ 3, 4],
[ 6, 6],
...
[90, 2],
[91, 6],
[92, 2]])
Có cách nào tốt hơn để làm điều này trong chính NumPy mà tôi bị thiếu không?
Giải pháp này đi qua các mảng len (muốn) lần. Nó thường nhanh hơn để đi qua mảng trong một lần. – EOL
Cảm ơn Amnon. Đây là giải pháp mà tôi quyết định chấp nhận.Tôi nghĩ rằng nó là rõ ràng để hiểu và là khoảng 20 x nhanh hơn so với giải pháp ban đầu của tôi. –
Điều gì sẽ xảy ra nếu tôi muốn chọn một số hàng nhất định với các giá trị có điều kiện trong cột? Ví dụ, tôi muốn chọn tất cả các hàng có cột 1 có giá trị trong khoảng từ 5 đến 10. Ví dụ: 'test [test [:, 1]> 4 & test [:, 1] <8]'. – Shyamkkhadka