2015-08-10 10 views
5

Chúng tôi có thuật toán dựa trên nền tảng được cho là xử lý dữ liệu thuộc loại khác nhau.Tổng hợp qua np.array hoặc np.float

def my_fancy_algo(a): 
    b = np.sum(a, axis=1) 
    # Do something b 
    return b 

Nếu chúng ta vượt qua a=np.array[1.0, 2.0, 3.0] sau đó b đánh giá để [6.0].

Nếu chúng ta vượt qua a=6.0 sau đó chúng tôi nhận

*** ValueError: 'axis' entry is out of bounds 

Các hành vi mong muốn sẽ là chúng ta có cùng một giá trị trả về 6.0 không ([6.0]) cho cả đầu vào.

Cách chính xác và an toàn chính xác để xử lý việc này là gì? type? shape?

Trả lời

9

mảng ví dụ của bạn thực sự mang lại cho cùng một vấn đề như một vô hướng:

>>> a = np.array([1.0,2.0,3.0]) 
>>> np.sum(a, axis=1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.4/site-packages/numpy/core/fromnumeric.py", line 1724, in sum 
    out=out, keepdims=keepdims) 
    File "/usr/lib/python3.4/site-packages/numpy/core/_methods.py", line 32, in _sum 
    return umr_sum(a, axis, dtype, out, keepdims) 
ValueError: 'axis' entry is out of bounds 

Tin tốt lành là rằng có một chức năng NumPy chính xác để đảm bảo thực hiện cuộc gọi NumPy với axis=1 sẽ làm việc - nó được gọi np.atleast_2d:

>>> np.sum(np.atleast_2d(a), axis=1) 
array([ 6.]) 
>>> np.sum(np.atleast_2d(6.0), axis=1) 
array([ 6.]) 

Nhưng vì bạn dường như muốn có câu trả lời vô hướng, thay vào đó bạn chỉ cần hủy đối số axis hoàn toàn:

>>> np.sum(a) 
6.0 
>>> np.sum(6.0) 
6.0 
3

np.sum(np.array([1.0, 2.0, 3.0]), axis=1) sản xuất ValueError: 'axis' entry is out of bounds cho tôi.

Ý của bạn là đặt axis=0 vào dòng 2? Sau đó, nó hoạt động cho mảng cũng như vô hướng:

>>> np.sum(np.array([1.0, 2.0, 3.0]), axis=0) 
6 
>>> np.sum(3, axis=0) 
3 
Các vấn đề liên quan