Một danh sách hiểu lồng nhau sẽ thực hiện công việc:
In [102]: [[i2-j2 for i2,j2 in zip(i1,j1)] for i1,j1 in zip(a,b)]
Out[102]: [[-4, -4, -4, -4], [-7, 2, 2, 2], [-1, -1, -1, -1, -1]]
vấn đề với np.array(a)-np.array(b)
là các danh sách con khác nhau về chiều dài, vì vậy các mảng kết quả là loại đối tượng - mảng các danh sách
In [104]: np.array(a)
Out[104]: array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6, 7]], dtype=object)
Phép trừ đang lặp qua mảng ngoài tốt, nhưng nhấn vào một vấn đề khi trừ một danh sách con khỏi danh sách con khác - do đó là thông báo lỗi.
Nếu tôi làm đầu vào mảng của các mảng, các phép trừ sẽ làm việc
In [106]: np.array([np.array(a1) for a1 in a])
Out[106]: array([array([1, 2, 3, 4]), array([2, 3, 4, 5]), array([3, 4, 5, 6, 7])], dtype=object)
In [107]: aa=np.array([np.array(a1) for a1 in a])
In [108]: bb=np.array([np.array(a1) for a1 in b])
In [109]: aa-bb
Out[109]:
array([array([-4, -4, -4, -4]),
array([-7, 2, 2, 2]),
array([-1, -1, -1, -1, -1])], dtype=object)
Bạn không thể đếm hoạt động mảng làm việc trên mảng đối tượng dtype. Nhưng trong trường hợp này, subtraction
được xác định cho các mạng con, vì vậy nó có thể xử lý việc lồng ghép.
Cách khác để làm tổ được sử dụng np.subtract
. Đây là một phiên bản ufunc
của -
và sẽ áp dụng np.asarray
đến đầu vào của nó khi cần thiết:
In [103]: [np.subtract(i1,j1) for i1,j1 in zip(a,b)]
Out[103]: [array([-4, -4, -4, -4]), array([-7, 2, 2, 2]), array([-1, -1, -1, -1, -1])]
Chú ý rằng những tính toán mảng trở lại mảng hoặc một danh sách các mảng. Việc chuyển các mảng bên trong trở lại danh sách yêu cầu lặp lại.
Nếu bạn đang bắt đầu với danh sách, chuyển đổi thành mảng thường không tiết kiệm thời gian. Mảng tính toán có thể nhanh hơn, nhưng điều đó không bù đắp cho chi phí trong việc tạo ra các mảng ở nơi đầu tiên.
Nếu tôi đệm đầu vào theo chiều dài bằng nhau, thì phép trừ mảng đơn giản sẽ tạo ra mảng 2d.
In [116]: ao= [[1,2,3,4,0], [2,3,4,5,0],[3,4,5,6,7]]; bo= [[5,6,7,8,0], [9,1,2,3,0], [4,5,6,7,8]]
In [117]: np.array(ao)-np.array(bo)
Out[117]:
array([[-4, -4, -4, -4, 0],
[-7, 2, 2, 2, 0],
[-1, -1, -1, -1, -1]])
Bạn có phải sử dụng gọn gàng không? – khajvah
kiểm tra http://stackoverflow.com/questions/13746955/converting-nested-lists-of-data-into-multidimensional-numpy-arrays – Glostas