Tôi cần viết một hàm sẽ phát hiện xem đầu vào có chứa ít nhất một giá trị không phải là số không. Nếu tìm thấy một giá trị không phải là số, tôi sẽ đưa ra một lỗi (vì phép tính chỉ trả về một giá trị số). Số thứ nguyên của mảng đầu vào không được biết trước - hàm sẽ cung cấp giá trị chính xác bất kể ndim là gì. Như một biến chứng thêm, đầu vào có thể là một phao đơn hoặc numpy.float64
hoặc thậm chí một cái gì đó kỳ quặc như một mảng không theo chiều.Phát hiện nếu một mảng NumPy có chứa ít nhất một giá trị không phải là số không?
Cách rõ ràng để giải quyết điều này là viết một hàm đệ quy lặp lại trên mọi đối tượng có thể lặp lại trong mảng cho đến khi nó tìm thấy không lặp lại. Nó sẽ áp dụng hàm numpy.isnan()
trên mọi đối tượng không thể lặp lại. Nếu tìm thấy ít nhất một giá trị không phải là số thì hàm sẽ trả về False ngay lập tức. Nếu không, nếu tất cả các giá trị trong iterable là số thì cuối cùng nó sẽ trả về True.
Điều đó chỉ hoạt động tốt, nhưng nó khá chậm và tôi hy vọng rằng NumPy có cách tốt hơn để thực hiện điều đó. Một giải pháp thay thế nhanh hơn và gọn gàng hơn là gì?
Dưới đây là mockup của tôi:
def contains_nan(myarray):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True
Mô tả của bạn cho 'contains_nan' có vẻ khả nghi: "Trả về false nếu ít nhất một giá trị không phải số tồn tại". Tôi đã có thể mong đợi 'contains_nan' để trả về' True' nếu mảng chứa NaN. –
Điều gì về các đầu vào như 'mảng (['Không', 'Không'], dtype = object)'? Nên một đầu vào như vậy chỉ cần tăng một ngoại lệ? –
KHÔNG sử dụng 'float ('nan') trong x'. Nó không hoạt động. –