2013-01-19 59 views
134

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

145

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.

+11

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

+12

@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

+2

Đ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

13

Sự khác biệt được đề cập khá rõ ràng trong tài liệu của arrayasarray. 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) 

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 arraykhô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.

48

Sự khác biệt có thể được chứng minh bằng ví dụ này:

  1. 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.]]) 
    
  2. sử dụng numpy.array để sửa đổi A. 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.]]) 
    
  3. sử dụng numpy.asarray để sửa đổi A.Nó làm việc bởi vì bạn đang thay đổi bản thân A

    >>> numpy.asarray(A)[2]=2 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 2., 2., 2.]]) 
    

Hope this helps!

+5

Cuối cùng ai đó đưa ra một ví dụ .. Cảm ơn bạn rất nhiều! – CapturedTree