Sự khác biệt giữa các chức năng của 01.và asarray()
của Numpy là gì? Khi nào bạn nên sử dụng cái kia thay vì cái kia? Họ dường như tạo ra đầu ra giống hệt nhau cho tất cả các yếu tố đầu vào tôi có thể nghĩ đến.Numpy - mảng vs asarray
Trả lời
Các definition of asarray
là:
Vì vậy, nó cũng giống như array
, ngoại trừ nó có các tùy chọn ít hơn, và copy=False
. array
có mặc định là copy=True
.
Sự khác biệt chính là array
(theo mặc định) sẽ tạo bản sao đối tượng trong khi asarray
sẽ không trừ khi cần thiết.
Sự khác biệt được đề cập khá rõ ràng trong tài liệu của array
và asarray
. Sự khác biệt nằm trong danh sách đối số và do đó tác động của hàm phụ thuộc vào các tham số đó.
Các định nghĩa chức năng bao gồm:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
và
numpy.asarray(a, dtype=None, order=None)
Những lập luận sau đây là những người có thể được chuyển tới array
và khôngasarray
như đã đề cập trong tài liệu:
bản sao: bool, o ptional Nếu đúng (mặc định), thì đối tượng được sao chép. Nếu không, bản sao sẽ chỉ được thực hiện nếu
__array__
trả về một bản sao, nếu obj là một chuỗi lồng nhau hoặc nếu cần sao chép để đáp ứng bất kỳ yêu cầu nào khác (dtype, order, v.v.).subok: bool, tùy chọn Nếu Đúng, sau đó tiểu học sẽ truyền qua, nếu mảng được trả về sẽ bị buộc phải trở thành một cơ sở lớp mảng (mặc định).
ndmin: int, optional Chỉ định số tối thiểu số tối thiểu mảng kết quả phải có. Những người sẽ được điều chỉnh trước theo hình dạng khi cần thiết để đáp ứng yêu cầu này.
Sự khác biệt có thể được chứng minh bằng ví dụ này:
tạo ra một ma trận
>>> A = numpy.matrix(np.ones((3,3))) >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
sử dụng
numpy.array
để sửa đổiA
. Không làm việc vì bạn đang chỉnh sửa một bản sao>>> numpy.array(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
sử dụng
numpy.asarray
để sửa đổiA
.Nó làm việc bởi vì bạn đang thay đổi bản thânA
>>> numpy.asarray(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 2., 2., 2.]])
Hope this helps!
Cuối cùng ai đó đưa ra một ví dụ .. Cảm ơn bạn rất nhiều! – CapturedTree
- 1. mảng numpy Python vs danh sách
- 2. So sánh với mảng numpy boolean VS PEP8 E712
- 3. Hình ảnh để NumPy mảng: JPG vs. PNG
- 4. Nối một mảng NumPy vào một mảng NumPy
- 5. nhanh chuyển đổi IplImage để mảng NumPy
- 6. mảng numpy với cython
- 7. Flatten mảng numpy
- 8. Mảng mảng NumPy sử dụng None
- 9. mảng bản ghi numpy 3d
- 10. Đối tượng mảng với numpy
- 11. 3d mảng NumPy để 2ngày
- 12. iterating trên một mảng NumPy
- 13. Ma trận Numpy thành mảng
- 14. Python mảng NumPy thay thế
- 15. Kết hợp các mảng NumPy
- 16. Numpy rebinning một mảng 2D
- 17. kích thước của mảng NumPy
- 18. mảng cắt trong NumPy/scipy
- 19. hàng xóa trong mảng NumPy
- 20. NumPy mảng đa chiều slicing
- 21. Làm thế nào để gán một mảng numpy 1D cho mảng numpy 2D?
- 22. Làm thế nào để nhân mảng 2D numpy với mảng 1D numpy?
- 23. Chọn hàng trong một mảng NumPy 2D với một vector boolean
- 24. Numpy: Tạo một mảng phức tạp từ 2 mảng thực?
- 25. mảng python hiệu quả để chuyển đổi mảng numpy
- 26. hiệu quả NumPy 2D mảng xây dựng từ mảng 1D
- 27. Vấn đề bộ nhớ mảng Numpy
- 28. Cách Pythonic để điền vào mảng numpy
- 29. Khoảng cách giữa các mảng numpy, cột
- 30. loại cython/numpy của một mảng
Vì vậy, khi nào chúng ta nên sử dụng mỗi? Nếu tạo một mảng từ đầu, thì tốt hơn, 'mảng ([1, 2, 3])' hoặc 'dấu cách ([1, 2, 3])'? – endolith
@endolith: '[1, 2, 3]' là một danh sách Python, vì vậy một bản sao của dữ liệu phải được tạo để tạo ra 'ndarary'. Vì vậy, hãy sử dụng 'np.array' trực tiếp thay vì' np.asarray', nó sẽ gửi tham số 'copy = False' tới' np.array'. 'Copy = False' bị bỏ qua nếu một bản sao phải được thực hiện như trong trường hợp này. Nếu bạn điểm chuẩn hai bằng cách sử dụng '% timeit' trong IPython bạn sẽ thấy một sự khác biệt cho các danh sách nhỏ, nhưng nó hầu như không quan trọng mà bạn sử dụng cho các danh sách lớn. – unutbu
Điều đó cũng có ý nghĩa đối với mỗi tên phương thức: "asarray": coi đây là mảng (inplace), nghĩa là, bạn sắp thay đổi chế độ xem của mình trên danh sách/mảng này. "mảng": Thực sự chuyển đổi thành mảng mới. – denvar