2010-07-16 65 views
5

Được rồi, câu hỏi về tân binh ở đây. Trong chương trình của tôi, tôi tạo một mảng có nhiều mảng 2D, một số mục nhập của người đó bị thiếu (không phải là loại "nan" không tồn tại, nhưng loại "Không", hoặc NoneType). Tôi muốn đặt một mặt nạ trên các mục này, nhưng tôi dường như có một số rắc rối làm như vậy. Thông thường, để mặt nạ trên, nói rằng, tất cả các mục có giá trị 2, tôi muốn làmTìm các giá trị bị thiếu trong một mảng có nhiều mảng

A = np.ma.masked_where (A [A == 2], A)

Trong trường hợp này, điều đó không dường như không hoạt động bất kể tôi thử tham số đầu tiên nào. Suy nghĩ?

Trả lời

5

Vì bạn có -- mục trong mảng của bạn, tôi đoán rằng nó có nghĩa là họ đã đeo mặt nạ:

>>> m = ma.masked_where([True, False]*5, arange(10)) 
>>> print m 
[-- 1 -- 3 -- 5 -- 7 -- 9] 

Vì vậy, tôi sẽ nói rằng mục của bạn đã được đeo mặt nạ và bạn có thể trực tiếp sử dụng mảng của bạn .

Nếu bạn muốn tạo một mảng chỉ chứa các giá trị không đeo mặt nạ, bạn có thể làm

>>> m[~m.mask] 
[1 3 5 7] 

nơi m là mảng đeo mặt nạ của mình.

Nếu bạn muốn có danh sách các giá trị đeo mặt nạ, bạn chỉ cần chọn các giá trị khác:

>>> m[m.mask] 
[0 2 4 6 8] 

Lưu ý rằng các giá trị bị mất là không Không, nhưng là những giá trị gốc, nói chung. Trong thực tế, một mảng các số nguyên không thể chứa None.

Nếu bạn muốn các chỉ số của các giá trị đeo mặt nạ, bạn có thể làm:

>>> numpy.nonzero(m.mask) 

Các documentation của numpy.nonzero() mô tả cách kết quả của nó phải được giải thích.

+0

Điểm tốt. Sau khi điều tra thêm, tôi thấy rằng bạn đã đúng. Các giá trị thực sự là vấn đề có vẻ là những vấn đề mà tôi đã không nhận thấy trước đây, đó thực sự là "Không". Vì vậy, bây giờ tôi sẽ thay đổi câu hỏi thành những gì nó cần phải có được: làm thế nào để bạn đi về việc tìm kiếm các giá trị "Không"? A [A == None] chỉ cho A [0 ,:] vì một lý do nào đó. – user391045

+0

Tôi đã thêm thông tin vào câu trả lời của mình: Tôi hy vọng rằng bạn sẽ tìm thấy những gì bạn cần trong đó! :) – EOL

+0

@ dave-schultz: Nếu sự hồi phục trong nhận xét của bạn ở trên là một tuyên bố rõ ràng hơn về câu hỏi, sẽ hữu ích nếu bạn chỉnh sửa câu hỏi của mình để phản ánh điều này. Nhiều người sẽ đọc câu hỏi của bạn hơn bình luận của bạn ở đây. – tom10

5

Để tìm các phần tử trong mảng có nhiều mảng không có, bạn có thể sử dụng numpy.equal. Dưới đây là ví dụ:

import numpy as np 
import MA 

x = np.array([1, 2, None]) 

print np.equal(x, None) 
# array([False, False, True], dtype=bool) 

# to get a masked array 
print MA.array(x, mask=np.equal(x,None)) 
# [1 ,2 ,-- ,] 
Các vấn đề liên quan