2015-01-08 22 views
6

Tôi có hai mảng numpy và tôi đang cố gắng chia một với nhau và cùng một lúc, tôi muốn đảm bảo rằng các mục mà số chia là 0, chỉ nên được thay thế bằng 0.numpy: Giá trị không hợp lệ gặp phải trong true_divide

Vì vậy, tôi làm điều gì đó như:

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0) 

này mang lại cho tôi một lời cảnh báo thời gian chạy của:

RuntimeWarning: invalid value encountered in true_divide 

Bây giờ, tôi muốn nhìn thấy những gì đang xảy ra và tôi đã làm tiếp theo:

xx = np.isfinite(diff_images) 
print (xx[xx == False]) 

xx = np.isfinite(b_0) 
print (xx[xx == False]) 

Tuy nhiên, cả hai giá trị này đều có nghĩa là tất cả các giá trị trong mảng đều hữu hạn. Vì vậy, tôi không chắc chắn giá trị không hợp lệ đến từ đâu. Tôi giả sử kiểm tra b_0> 0 trong hàm np.where sẽ phân chia số chia cho 0.

Hình dạng của hai mảng là (96, 96, 55, 64) và (96, 96, 55, 1)

+0

Tại sao 'xx' là' Sai' và một lệnh chính tả? – seequ

+0

Tôi nghĩ rằng isfinite trả về một mảng boolean. Vì vậy, tôi đang tìm những nơi mà các giá trị là không hữu hạn. – Luca

+0

Thử '[x cho x trong xx nếu x == Sai]'. Bạn chỉ đang cố lấy khóa 'False' – seequ

Trả lời

5

Bạn có thể có NAN, INF hoặc NINF thả nổi ở đâu đó. Hãy thử điều này:

np.isfinite(diff_images).all() 
np.isfinite(b_0).all() 

Nếu một hoặc cả hai trả về False, đó có thể là nguyên nhân gây ra lỗi thời gian chạy.

+0

Điều này làm tăng giá trị thực của một mảng có nhiều hơn một phần tử không rõ ràng. Sử dụng a.any() hoặc a.all() – Luca

+0

@Luca Xin lỗi, đã chỉnh sửa câu trả lời - Tôi quên bạn đã xử lý các mảng đa chiều trong một giây. :) – rchang

+0

Cảm ơn. Cả hai đều trở lại đúng mặc dù:/ – Luca

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