2011-12-06 33 views
8

Người ta có thể sử dụng chức năng của để khớp với một phần tử trong một mảng. Mã sau khớp với phần tử 'a.' chính xác trong một mảng. Giả sử tôi muốn để khớp với tất cả các thành phần có chứa '.', tôi sẽ làm như thế nào? Lưu ý rằng trong trường hợp này, sẽ có hai kết quả phù hợp. Tôi cũng muốn nhận được số hàng và cột của các trận đấu. Phương pháp này không phải sử dụng extract; bất kỳ phương pháp nào cũng sẽ làm. Cảm ơn.tìm yếu tố của mảng numpy thỏa mãn điều kiện

In [110]: x = np.array([['a.','cd'],['ef','g.']]) 

In [111]: 'a.' == x 
Out[111]: 
array([[ True, False], 
     [False, False]], dtype=bool) 

In [112]: np.extract('a.' == x, x) 
Out[112]: 
array(['a.'], 
     dtype='|S2') 
+4

Sẽ ít khó hiểu khi viết 'x == 'a.'', không phải là nó giúp trả lời câu hỏi của bạn – Benjamin

Trả lời

9

Bạn có thể sử dụng string operations: EDIT

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> x[np.char.find(x, '.') > -1] 
array(['a.', 'g.'], 
     dtype='|S2') 

: Theo yêu cầu trong các ý kiến ​​... Nếu bạn muốn tìm hiểu các chỉ số về nơi điều kiện mục tiêu là đúng, sử dụng numpy.where:

>>> np.where(np.char.find(x, '.') > -1) 
(array([0, 1]), array([0, 1])) 

hoặc

>>> zip(*np.where(np.char.find(x, '.') > -1)) 
[(0, 0), (1, 1)] 
+3

Đẹp, không bao giờ biết về 'char' – Benjamin

+0

Cảm ơn. Bất kỳ cách nào để tìm hàng và cột? –

+0

@mac: Xem nhận xét ở cuối câu hỏi chính. Tôi không thể phù hợp với khái niệm của SO về một bình luận. –

3

Làm thế nào về điều này?

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> selector = np.array(['.' in s for s in x.flat]).reshape(x.shape) 
>>> x[selector] 
array(['a.', 'g.'], 
     dtype='|S2') 
+0

Giải pháp hay !! – Benjamin

+0

Cảm ơn. Bất kỳ cách nào để tìm hàng và cột? –

+0

Điều này phù hợp với tôi, Cảm ơn. –

Các vấn đề liên quan