Lập chỉ mục trong ví dụ python

Hiểu cách áp dụng một số phép toán đại số tuyến tính cho mảng n chiều không sử dụng vòng lặp for;

  • Hiểu thuộc tính trục và hình cho mảng n chiều

  • Những thứ cơ bản#

    Đối tượng chính của NumPy là mảng đa chiều đồng nhất. Nó là một bảng các phần tử (thường là số), tất cả cùng loại, được lập chỉ mục bởi một bộ các số nguyên không âm. Trong kích thước NumPy được gọi là trục

    Ví dụ: mảng cho tọa độ của một điểm trong không gian 3D,

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    0, có một trục. Trục đó có 3 phần tử nên ta nói nó có độ dài là 3. Trong ví dụ hình bên dưới, mảng có 2 trục. Trục thứ nhất có chiều dài là 2, trục thứ hai có chiều dài là 3

    [[1., 0., 0.],
     [0., 1., 2.]]
    

    Lớp mảng của NumPy được gọi là

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    1. Nó còn được biết đến với bí danh
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2. Lưu ý rằng
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    3 không giống với lớp Thư viện Python tiêu chuẩn
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    4, chỉ xử lý các mảng một chiều và cung cấp ít chức năng hơn. Các thuộc tính quan trọng hơn của một đối tượng
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    1 là

    ndarray. đim

    số lượng trục (thứ nguyên) của mảng

    ndarray. hình dạng

    kích thước của mảng. Đây là một bộ số nguyên cho biết kích thước của mảng trong mỗi chiều. Đối với ma trận có n hàng và m cột,

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    6 sẽ là
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    7. Do đó, độ dài của bộ dữ liệu
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    6 là số lượng trục,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    9

    ndarray. kích thước

    tổng số phần tử của mảng. Cái này bằng tích của các phần tử của

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    6

    ndarray. gõ

    một đối tượng mô tả kiểu của các phần tử trong mảng. Người ta có thể tạo hoặc chỉ định dtype bằng cách sử dụng các loại Python tiêu chuẩn. Ngoài ra, NumPy cung cấp các loại của riêng nó. cục mịch. int32, gọn gàng. int16 và numpy. float64 là một số ví dụ

    ndarray. kích thước mục

    kích thước tính bằng byte của từng phần tử của mảng. Ví dụ, một mảng các phần tử kiểu

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    21 có
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    22 8 (=64/8), trong khi một mảng kiểu
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    23 có
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    22 4 (=32/8). Nó tương đương với
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    25

    ndarray. dữ liệu

    bộ đệm chứa các phần tử thực tế của mảng. Thông thường, chúng ta sẽ không cần sử dụng thuộc tính này vì chúng ta sẽ truy cập các phần tử trong một mảng bằng cách sử dụng các phương tiện lập chỉ mục

    Một ví dụ#

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    7

    Tạo mảng #

    Có một số cách để tạo mảng

    Ví dụ: bạn có thể tạo một mảng từ danh sách hoặc bộ dữ liệu Python thông thường bằng cách sử dụng hàm

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2. Kiểu của mảng kết quả được suy ra từ kiểu của các phần tử trong dãy

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    9

    Một lỗi thường gặp bao gồm việc gọi

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2 với nhiều đối số, thay vì cung cấp một chuỗi duy nhất làm đối số

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    1

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2 chuyển dãy dãy thành mảng hai chiều, dãy dãy dãy thành mảng ba chiều, v.v.

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    3

    Loại mảng cũng có thể được chỉ định rõ ràng tại thời điểm tạo

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    4

    Thông thường, các phần tử của một mảng ban đầu không được biết, nhưng kích thước của nó được biết. Do đó, NumPy cung cấp một số chức năng để tạo mảng với nội dung giữ chỗ ban đầu. Những điều này giảm thiểu sự cần thiết của việc phát triển mảng, một hoạt động tốn kém

    Hàm

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    29 tạo một mảng đầy các số 0, hàm
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    60 tạo một mảng đầy các số 1 và hàm
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    61 tạo một mảng có nội dung ban đầu là ngẫu nhiên và phụ thuộc vào trạng thái của bộ nhớ. Theo mặc định, dtype của mảng đã tạo là
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    21, nhưng nó có thể được chỉ định thông qua đối số từ khóa
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    63

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    

    Để tạo các chuỗi số, NumPy cung cấp hàm

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    64 tương tự như hàm
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    65 tích hợp sẵn của Python, nhưng trả về một mảng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    2

    Khi

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    64 được sử dụng với các đối số dấu phẩy động, thường không thể dự đoán số lượng phần tử thu được do độ chính xác của dấu phẩy động hữu hạn. Vì lý do này, tốt hơn là sử dụng hàm
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    67 nhận làm đối số số phần tử mà chúng ta muốn, thay vì bước

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    6

    Xem thêm

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    29,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    90,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    60,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    92,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    61,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    94,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    64,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    67, numpy. ngẫu nhiên. Máy phát điện. rand, numpy. ngẫu nhiên. Máy phát điện. Randn,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    97,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    98

    Mảng in #

    Khi bạn in một mảng, NumPy sẽ hiển thị nó theo cách tương tự như danh sách lồng nhau, nhưng với bố cục sau

    • trục cuối cùng được in từ trái sang phải,

    • thứ hai đến cuối cùng được in từ trên xuống dưới,

    • phần còn lại cũng được in từ trên xuống dưới, với mỗi lát cách nhau bởi một dòng trống

    Mảng một chiều sau đó được in dưới dạng hàng, hai chiều dưới dạng ma trận và ba chiều dưới dạng danh sách ma trận

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    9

    Xem bên dưới để biết thêm chi tiết về

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    99.

    Nếu một mảng quá lớn để in, NumPy sẽ tự động bỏ qua phần trung tâm của mảng và chỉ in các góc

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    70

    Để tắt hành vi này và buộc NumPy in toàn bộ mảng, bạn có thể thay đổi các tùy chọn in bằng cách sử dụng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    700

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    71

    Hoạt động cơ bản#

    Toán tử số học trên mảng áp dụng theo phần tử. Một mảng mới được tạo và điền vào kết quả

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    72

    Không giống như trong nhiều ngôn ngữ ma trận, toán tử tích ________ 1701 vận hành phần tử một cách khôn ngoan trong mảng NumPy. Tích ma trận có thể được thực hiện bằng toán tử

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    702 (trong python >=3. 5) hoặc hàm hoặc phương thức
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    703

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    73

    Một số thao tác, chẳng hạn như

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    704 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    705, hoạt động tại chỗ để sửa đổi một mảng hiện có thay vì tạo một mảng mới

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    74

    Khi thao tác với các mảng thuộc các loại khác nhau, loại của mảng kết quả tương ứng với loại tổng quát hoặc chính xác hơn (một hành vi được gọi là upcasting)

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    75

    Nhiều hoạt động đơn nguyên, chẳng hạn như tính tổng của tất cả các phần tử trong mảng, được triển khai như các phương thức của lớp

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    1

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    76

    Theo mặc định, các thao tác này áp dụng cho mảng như thể nó là một danh sách các số, bất kể hình dạng của nó là gì. Tuy nhiên, bằng cách chỉ định tham số

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    707, bạn có thể áp dụng thao tác dọc theo trục đã chỉ định của một mảng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    77

    Chức năng phổ quát #

    NumPy cung cấp các hàm toán học quen thuộc như sin, cos và exp. Trong NumPy, chúng được gọi là “các hàm phổ dụng” (

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    708). Trong NumPy, các hàm này hoạt động theo từng phần tử trên một mảng, tạo ra một mảng làm đầu ra

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    78

    Xem thêm

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    709,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    710,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    711,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    712,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    713,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    714,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    715,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    716,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    717,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    718,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    719,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    720,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    721,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    722,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    723,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    724,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    725,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    703,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    727,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    728,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    729,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    730,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    731,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    732,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    733,

    Lập chỉ mục, cắt lát và lặp lại #

    Mảng một chiều có thể được lập chỉ mục, cắt lát và lặp lại, giống như danh sách và các chuỗi Python khác

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    79

    Mảng nhiều chiều có thể có một chỉ mục trên mỗi trục. Các chỉ số này được đưa ra trong một bộ được phân tách bằng dấu phẩy

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    90

    Khi số lượng chỉ mục được cung cấp ít hơn số lượng trục, các chỉ mục còn thiếu được coi là các lát cắt hoàn chỉnh

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    751

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    91

    Biểu thức trong ngoặc ở ________ 1752 được coi là một ________ 1753, theo sau là bao nhiêu trường hợp của

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    751 nếu cần để biểu thị các trục còn lại. NumPy cũng cho phép bạn viết điều này bằng cách sử dụng dấu chấm như
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    755

    Các dấu chấm (

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    756) đại diện cho bao nhiêu dấu hai chấm cần thiết để tạo ra một bộ lập chỉ mục hoàn chỉnh. Ví dụ: nếu
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    757 là một mảng có 5 trục, thì

    • ________ 1758 tương đương với ________ 1759,

    • [[1., 0., 0.],
       [0., 1., 2.]]
      
      760 đến
      [[1., 0., 0.],
       [0., 1., 2.]]
      
      761 và

    • [[1., 0., 0.],
       [0., 1., 2.]]
      
      762 đến
      [[1., 0., 0.],
       [0., 1., 2.]]
      
      763

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    92

    Việc lặp lại các mảng nhiều chiều được thực hiện đối với trục đầu tiên

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    93

    Tuy nhiên, nếu muốn thực hiện một thao tác trên từng phần tử trong mảng, người ta có thể sử dụng thuộc tính

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    764 là một trình vòng lặp trên tất cả các phần tử của mảng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    94

    Xem thêm

    Lập chỉ mục trên ndarrays , Quy trình lập chỉ mục (tham khảo),

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    765,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    766,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    767

    Thao tác hình dạng #

    Thay đổi hình dạng của một mảng#

    Một mảng có hình dạng được xác định bởi số phần tử dọc theo mỗi trục

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    95

    Hình dạng của một mảng có thể được thay đổi bằng các lệnh khác nhau. Lưu ý rằng ba lệnh sau đều trả về một mảng đã sửa đổi, nhưng không thay đổi mảng ban đầu

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    96

    Thứ tự của các phần tử trong mảng kết quả từ

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    768 thường là “kiểu C”, nghĩa là chỉ số ngoài cùng bên phải “thay đổi nhanh nhất”, vì vậy phần tử sau
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    769 là
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    770. Nếu mảng được định hình lại thành một số hình dạng khác, thì mảng đó lại được coi là “kiểu C”. NumPy thường tạo các mảng được lưu trữ theo thứ tự này, vì vậy,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    768 thường sẽ không cần sao chép đối số của nó, nhưng nếu mảng được tạo bằng cách lấy các lát của mảng khác hoặc được tạo bằng các tùy chọn khác thường, thì có thể cần phải sao chép mảng đó. Các hàm
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    768 và
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    99 cũng có thể được hướng dẫn, sử dụng đối số tùy chọn, để sử dụng mảng kiểu FORTRAN, trong đó chỉ số ngoài cùng bên trái thay đổi nhanh nhất

    Hàm

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    99 trả về đối số của nó với hình dạng đã sửa đổi, trong khi phương thức
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    775 tự sửa đổi mảng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    97

    Nếu một thứ nguyên được đưa ra là

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    776 trong thao tác định hình lại, thì các thứ nguyên khác sẽ được tự động tính toán

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    98

    Xem thêm

    ________ 1777, ________ 399, ________ 1779, ________ 1768

    Xếp chồng các mảng khác nhau #

    Một số mảng có thể được xếp chồng lên nhau dọc theo các trục khác nhau

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    99

    Hàm

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    781 xếp mảng 1D dưới dạng cột thành mảng 2D. Nó tương đương với
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    782 chỉ dành cho mảng 2D

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    10

    Mặt khác, hàm

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    783 tương đương với
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784 cho bất kỳ mảng đầu vào nào. Trên thực tế,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    783 là bí danh của
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    11

    Nói chung, đối với các mảng có nhiều hơn hai chiều,

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    782 ngăn xếp dọc theo trục thứ hai của chúng, ngăn xếp
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784 dọc theo trục thứ nhất của chúng và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    789 cho phép đối số tùy chọn đưa ra số lượng trục dọc theo đó quá trình nối sẽ xảy ra

    Ghi chú

    Trong các trường hợp phức tạp,

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    790 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    791 rất hữu ích để tạo mảng bằng cách xếp chồng các số dọc theo một trục. Họ cho phép sử dụng phạm vi chữ
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    751

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    12

    Khi được sử dụng với các mảng làm đối số,

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    790 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    791 tương tự như
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    782 trong hành vi mặc định của chúng, nhưng cho phép đối số tùy chọn đưa ra số lượng trục để nối

    Xem thêm

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    782,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784, ________ 1781, ________ 1789, ________ 1791, ________ 1790

    Tách một mảng thành nhiều mảng nhỏ hơn#

    Sử dụng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    903, bạn có thể phân chia một mảng dọc theo trục ngang của nó, bằng cách chỉ định số mảng có hình dạng bằng nhau sẽ trả về hoặc bằng cách chỉ định các cột mà sau đó quá trình phân chia sẽ diễn ra

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    13

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    904 tách dọc theo trục dọc và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    905 cho phép một người chỉ định dọc theo trục nào sẽ tách

    Bản sao và Lượt xem#

    Khi vận hành và thao tác với mảng, dữ liệu của chúng đôi khi được sao chép vào một mảng mới và đôi khi không. Đây thường là một nguồn gây nhầm lẫn cho người mới bắt đầu. Có ba trường hợp

    Không Sao Chép gì cả#

    Các nhiệm vụ đơn giản không tạo bản sao của các đối tượng hoặc dữ liệu của chúng

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    14

    Python chuyển các đối tượng có thể thay đổi làm tham chiếu, vì vậy các lệnh gọi hàm không sao chép

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    15

    Xem hoặc Sao chép cạn#

    Các đối tượng mảng khác nhau có thể chia sẻ cùng một dữ liệu. Phương thức

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    906 tạo một đối tượng mảng mới xem xét cùng một dữ liệu

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    16

    Cắt một mảng trả về một dạng xem của nó

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    17

    Bản sao sâu #

    Phương thức

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    907 tạo một bản sao hoàn chỉnh của mảng và dữ liệu của nó

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    18

    Đôi khi nên gọi

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    907 sau khi cắt nếu mảng ban đầu không còn cần thiết nữa. Ví dụ: giả sử
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909 là một kết quả trung gian rất lớn và kết quả cuối cùng
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    910 chỉ chứa một phần nhỏ của
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909, nên tạo một bản sao sâu khi xây dựng
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    910 bằng cách cắt

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    19

    Nếu thay vào đó,

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    913 được sử dụng, thì
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909 được tham chiếu bởi
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    910 và sẽ tồn tại trong bộ nhớ ngay cả khi
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    916 được thực thi

    Hàm và Phương thức Tổng quan#

    Dưới đây là danh sách một số tên phương thức và hàm NumPy hữu ích được sắp xếp theo danh mục. Xem Quy trình để biết danh sách đầy đủ.

    Tạo mảng

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    64,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    2,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    907,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    61,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    94,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    922,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    98,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    97,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    925,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    67,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    927,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    928,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    929,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    60,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    92,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    790,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    29,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    90

    chuyển đổi

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    935,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    936,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    937,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    938,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    939

    thao tác

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    905,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    781,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    789,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    943,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    944,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    945,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    903,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    782,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    948,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    765,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    768,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    951,
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    99,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    779,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    954,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    955,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    956,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    746,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    904,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    784

    câu hỏi

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    709,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    710,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    737,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    750

    đặt hàng

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    712,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    713,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    714,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    731, ________ 1735, ________ 1969, ________ 1970, ________ 1742

    hoạt động

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    972,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    973,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    723,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    724,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    728,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    977,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    978,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    739,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    980,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    981,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    982,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    744

    Thống kê cơ bản

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    721,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    733,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    743,
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    747

    Đại số tuyến tính cơ bản

    ________ 1722, ________ 1703, ________ 1738, ________ 1991, ________ 1748

    Ít cơ bản hơn #

    Quy tắc phát sóng #

    Phát sóng cho phép các chức năng phổ biến xử lý theo cách có ý nghĩa với các đầu vào không có hình dạng giống hệt nhau

    Quy tắc đầu tiên của truyền phát là nếu tất cả các mảng đầu vào không có cùng số lượng kích thước, thì số “1” sẽ được lặp lại thêm vào trước hình dạng của các mảng nhỏ hơn cho đến khi tất cả các mảng có cùng số lượng kích thước

    Quy tắc phát sóng thứ hai đảm bảo rằng các mảng có kích thước 1 dọc theo một chiều cụ thể hoạt động như thể chúng có kích thước của mảng có hình dạng lớn nhất dọc theo chiều đó. Giá trị của phần tử mảng được coi là giống nhau dọc theo thứ nguyên đó đối với mảng "phát sóng"

    Sau khi áp dụng quy tắc phát sóng, kích thước của tất cả các mảng phải khớp với nhau. Bạn có thể tìm thêm chi tiết trong Phát sóng .

    Thủ thuật lập chỉ mục và lập chỉ mục nâng cao#

    NumPy cung cấp nhiều tiện ích lập chỉ mục hơn các chuỗi Python thông thường. Ngoài việc lập chỉ mục theo số nguyên và lát, như chúng ta đã thấy trước đây, mảng có thể được lập chỉ mục theo mảng số nguyên và mảng boolean

    Lập chỉ mục với Mảng chỉ số #

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    30

    Khi mảng được lập chỉ mục

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909 là nhiều chiều, một mảng chỉ số duy nhất đề cập đến chiều đầu tiên của
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909. Ví dụ sau đây cho thấy hành vi này bằng cách chuyển đổi hình ảnh nhãn thành hình ảnh màu bằng cách sử dụng bảng màu

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    31

    Chúng tôi cũng có thể đưa ra các chỉ mục cho nhiều thứ nguyên. Các mảng chỉ số cho mỗi thứ nguyên phải có cùng hình dạng

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    32

    Trong Python,

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    995 hoàn toàn giống với
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    996—vì vậy chúng ta có thể đặt
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    753 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    998 trong một
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    999 và sau đó thực hiện lập chỉ mục với điều đó

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    33

    Tuy nhiên, chúng ta không thể làm điều này bằng cách đặt

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    753 và
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    998 vào một mảng, vì mảng này sẽ được hiểu là đánh chỉ số cho chiều thứ nhất của
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    34

    Một cách sử dụng phổ biến khác của lập chỉ mục với mảng là tìm kiếm giá trị lớn nhất của chuỗi phụ thuộc thời gian

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    35

    Bạn cũng có thể sử dụng lập chỉ mục với các mảng làm mục tiêu để gán cho

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    36

    Tuy nhiên, khi danh sách các chỉ mục chứa các lần lặp lại, phép gán được thực hiện nhiều lần, để lại giá trị cuối cùng

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    37

    Điều này là đủ hợp lý, nhưng hãy cẩn thận nếu bạn muốn sử dụng cấu trúc

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    704 của Python, vì nó có thể không hoạt động như bạn mong đợi

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    38

    Mặc dù 0 xuất hiện hai lần trong danh sách các chỉ mục, nhưng phần tử thứ 0 chỉ được tăng lên một lần. Điều này là do Python yêu cầu

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    104 tương đương với
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    105

    Lập chỉ mục với Boolean Arrays#

    Khi chúng tôi lập chỉ mục các mảng với các mảng chỉ số (số nguyên), chúng tôi sẽ cung cấp danh sách các chỉ mục để chọn. Với các chỉ số boolean, cách tiếp cận là khác nhau;

    Cách tự nhiên nhất mà người ta có thể nghĩ ra để lập chỉ mục boolean là sử dụng các mảng boolean có hình dạng giống như mảng ban đầu

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    39

    Thuộc tính này có thể rất hữu ích trong các bài tập

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    40

    Bạn có thể xem ví dụ sau để biết cách sử dụng lập chỉ mục boolean để tạo hình ảnh của bộ Mandelbrot

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    41

    Lập chỉ mục trong ví dụ python

    Cách lập chỉ mục thứ hai với booleans tương tự như lập chỉ mục số nguyên;

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    42

    Lưu ý rằng độ dài của mảng boolean 1D phải trùng với độ dài của kích thước (hoặc trục) mà bạn muốn cắt. Trong ví dụ trước,

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    106 có độ dài 3 (số hàng trong
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909) và
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    108 (có độ dài 4) phù hợp để lập chỉ mục cho trục (cột) thứ 2 của
    [[1., 0., 0.],
     [0., 1., 2.]]
    
    909

    Hàm ix_()#

    Hàm

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    110 có thể được sử dụng để kết hợp các vectơ khác nhau để thu được kết quả cho mỗi n-uplet. Ví dụ: nếu bạn muốn tính tất cả a+b*c cho tất cả các bộ ba được lấy từ mỗi vectơ a, b và c

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    43

    Bạn cũng có thể thực hiện giảm như sau

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    44

    và sau đó sử dụng nó như

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    45

    Ưu điểm của phiên bản rút gọn này so với ufunc thông thường. giảm là nó sử dụng quy tắc phát sóng để tránh tạo một mảng đối số có kích thước của đầu ra nhân với số lượng vectơ.

    Lập chỉ mục với chuỗi #

    Xem Mảng có cấu trúc .

    Thủ thuật và thủ thuật#

    Ở đây chúng tôi đưa ra một danh sách các lời khuyên ngắn và hữu ích

    Định hình lại “Tự động”#

    Để thay đổi kích thước của một mảng, bạn có thể bỏ qua một trong các kích thước mà sau đó sẽ được suy ra tự động

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    46

    Vector Xếp Chồng #

    Làm cách nào để chúng tôi xây dựng một mảng 2D từ danh sách các vectơ hàng có kích thước bằng nhau? . nếu

    [[1., 0., 0.],
     [0., 1., 2.]]
    
    757 và
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    112 là hai vectơ có cùng độ dài thì bạn chỉ cần thực hiện ____
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    113. Trong NumPy, điều này hoạt động thông qua các chức năng ________ 1781, ________ 1945, ________ 1782 và ________ 1784, tùy thuộc vào thứ nguyên mà việc xếp chồng sẽ được thực hiện. Ví dụ

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    47

    Logic đằng sau những chức năng đó trong hơn hai chiều có thể lạ

    Xem thêm

    NumPy cho người dùng MATLAB

    Biểu đồ #

    Hàm NumPy

    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    118 được áp dụng cho một mảng trả về một cặp vectơ. biểu đồ của mảng và một vectơ của các cạnh bin. coi chừng.
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    49 cũng có chức năng xây dựng biểu đồ (được gọi là
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    120, như trong Matlab) khác với chức năng trong NumPy. Sự khác biệt chính là
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    121 tự động vẽ biểu đồ, trong khi
    >>> np.zeros((3, 4))
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    >>> np.ones((2, 3, 4), dtype=np.int16)
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    >>> np.empty((2, 3)) 
    array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
           [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
    
    122 chỉ tạo dữ liệu