2011-11-21 35 views
20

Sự khác nhau giữa một đối tượng iterable và đối tượng array_like trong chương trình Python sử dụng Numpy là gì?Thuật ngữ: Python và Numpy - `iterable` so với` array_like`

Cả hai iterablearray_like thường được thấy trong tài liệu Python và chúng chia sẻ một số thuộc tính tương tự.

Tôi hiểu rằng trong ngữ cảnh này, đối tượng array_like phải hỗ trợ hoạt động loại Numpy như phát sóng, tuy nhiên, khu vực mảng Numpy cũng có thể lặp lại. Có đúng không khi nói rằng array_like là tiện ích mở rộng (hoặc siêu thiết lập?) Của iterable?

Trả lời

23

Thuật ngữ "array-like" thực sự chỉ được sử dụng trong NumPy và đề cập đến bất kỳ thứ gì có thể được chuyển làm tham số đầu tiên thành numpy.array() để tạo mảng.

Thuật ngữ "iterable" là thuật ngữ python chuẩn và tham chiếu đến bất kỳ thứ gì có thể được lặp lại (ví dụ sử dụng for x in iterable).

Hầu hết các đối tượng giống mảng đều có thể lặp lại, ngoại trừ các loại vô hướng.

Nhiều lần lặp không giống như mảng - ví dụ: bạn không thể tạo mảng NumPy từ biểu thức trình tạo bằng cách sử dụng numpy.array(). (Tuy nhiên, bạn sẽ phải sử dụng numpy.fromiter(). Tuy nhiên, biểu thức trình tạo không phải là "giống như mảng" trong thuật ngữ của tài liệu NumPy.)

+0

lớn - nhờ. Điều đó xóa nó, đặc biệt là liên kết giữa 'mảng-like' và arg đầu tiên của' numpy.array() '. – dtlussier

+0

"Tất cả các đối tượng giống mảng đều có thể lặp lại" - điều này không chính xác. Giá trị vô hướng của kiểu '' 'int''' giống như mảng và có thể được chuyển tới' '' numpy.array() '' ', nhưng nó không thể lặp lại được. – wombatonfire

+0

@wombatonfire Yup, đó là sự thật. Ngay cả các mảng 0-d thực tế cũng không thể được lặp lại, trong khi chúng rõ ràng là "giống mảng". Họ thậm chí là mảng. –

3

Trong khi phần đầu tiên của câu trả lời của Sven là chính xác, tôi muốn để thêm các đối tượng giống mảng đó không nhất thiết phải lặp lại được.

Ví dụ, trong trường hợp cụ thể của tôi, tôi quan tâm đến việc sử dụng hàm numpy.rint() chấp nhận các đối tượng giống mảng có vô hướng loại int. Chúng không thể lặp lại được, nhưng chúng được chấp nhận. Bạn cũng có thể vượt qua int s đến numpy.array(), để chúng giống như mảng.

Đây là xác nhận từ mailing list "NumPy-Thảo luận": https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html

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