Tại sao NP được sử dụng trong Python?

NumPy là gói phân tích dữ liệu Python thường được sử dụng. Bằng cách sử dụng NumPy, bạn có thể tăng tốc quy trình làm việc của mình và giao tiếp với các gói khác trong hệ sinh thái Python, như scikit-learning, sử dụng NumPy dưới mui xe. NumPy ban đầu được phát triển vào giữa những năm 2000 và phát sinh từ một gói thậm chí còn cũ hơn có tên là Numeric. Tuổi thọ này có nghĩa là hầu hết mọi gói phân tích dữ liệu hoặc máy học cho Python đều tận dụng NumPy theo một cách nào đó

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn sử dụng NumPy để phân tích dữ liệu về chất lượng rượu vang. Dữ liệu chứa thông tin về các thuộc tính khác nhau của rượu vang, chẳng hạn như


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
07 và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
08, cùng với điểm chất lượng trong khoảng từ

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
09 đến

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10 cho mỗi loại rượu vang. Điểm chất lượng là điểm trung bình của ít nhất

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 người thử hương vị con người. Khi tìm hiểu cách làm việc với NumPy, chúng tôi sẽ cố gắng tìm hiểu thêm về chất lượng cảm nhận của rượu vang

Các loại rượu chúng tôi sẽ phân tích là từ vùng Minho của Bồ Đào Nha

Dữ liệu được tải xuống từ Kho lưu trữ máy học của UCI và có sẵn tại đây. Đây là một vài hàng đầu tiên của tệp


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
12 mà chúng tôi sẽ sử dụng trong suốt hướng dẫn này

"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5

Dữ liệu ở định dạng mà tôi sẽ gọi là ssv [các giá trị được phân tách bằng dấu chấm phẩy] — mỗi bản ghi được phân tách bằng dấu chấm phẩy [


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
13] và các hàng được phân tách bằng một dòng mới. Có

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
14 hàng trong tệp, bao gồm hàng tiêu đề và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
15 cột

Trước khi chúng tôi bắt đầu, một ghi chú phiên bản nhanh - chúng tôi sẽ sử dụng Python 3. 5. Các ví dụ mã của chúng tôi sẽ được thực hiện bằng sổ ghi chép Jupyter

Danh sách danh sách cho dữ liệu CSV

Trước khi sử dụng NumPy, trước tiên chúng tôi sẽ thử làm việc với dữ liệu bằng Python và gói csv. Chúng tôi có thể đọc trong tệp bằng cách sử dụng đối tượng, điều này sẽ cho phép chúng tôi đọc và chia nhỏ tất cả nội dung từ tệp ssv

Trong đoạn mã dưới đây, chúng tôi

  • Nhập thư viện
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    16
  • Mở tệp
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    12
    • Với tệp đang mở, hãy tạo một đối tượng
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      18 mới
      • Chuyển đối số từ khóa
        
        import csv
        with open['winequality-red.csv', 'r'] as f:
            wines = list[csv.reader[f, delimiter=';']]
        
        19 để đảm bảo rằng các bản ghi được phân chia theo ký tự dấu chấm phẩy thay vì ký tự dấu phẩy mặc định
    • Gọi loại để lấy tất cả các hàng từ tệp
    • Gán kết quả cho
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      20

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]

Khi chúng tôi đã đọc dữ liệu, chúng tôi có thể in ra


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 hàng đầu tiên

print[wines[:3]]
[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]

Dữ liệu đã được đọc vào một danh sách các danh sách. Mỗi danh sách bên trong là một hàng từ tệp ssv. Như bạn có thể nhận thấy, mỗi mục trong toàn bộ danh sách được biểu diễn dưới dạng một chuỗi, điều này sẽ khiến việc tính toán trở nên khó khăn hơn

Chúng tôi sẽ định dạng dữ liệu thành một bảng để dễ xem hơn

độ axit cố định độ axit dễ bay hơi axit xitric đường dư clorua lưu huỳnh đioxit tự do tổng lưu huỳnh đioxit tỷ trọng pH sunfat rượu cồn chất lượng7. 40. 7001. 90. 07611340. 99783. 510. 569. 457. 80. 8802. 60. 09825670. 99683. 200. 689. 85

Như bạn có thể thấy từ bảng trên, chúng tôi đã đọc thành ba hàng, hàng đầu tiên chứa các tiêu đề cột. Mỗi hàng sau hàng tiêu đề đại diện cho một loại rượu. Phần tử đầu tiên của mỗi hàng là


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
08, phần tử thứ hai là

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
23, v.v. Chúng tôi có thể tìm thấy trung bình _______ 24 loại rượu. Đoạn mã dưới đây sẽ

  • Trích xuất phần tử cuối cùng từ mỗi hàng sau hàng tiêu đề
  • Chuyển đổi từng phần tử được trích xuất thành float
  • Gán tất cả các phần tử được trích xuất vào danh sách
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    25
  • Chia tổng của tất cả các phần tử trong
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    25 cho tổng số phần tử trong
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    25 để lấy giá trị trung bình
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
5.6360225140712945

Mặc dù chúng tôi có thể thực hiện phép tính mà chúng tôi muốn, nhưng mã này khá phức tạp và sẽ không vui khi phải làm điều gì đó tương tự mỗi khi chúng tôi muốn tính toán một số lượng. May mắn thay, chúng ta có thể sử dụng NumPy để làm việc với dữ liệu của mình dễ dàng hơn

Mảng 2 chiều Numpy

Với NumPy, chúng tôi làm việc với mảng nhiều chiều. Chúng ta sẽ đi sâu vào tất cả các loại mảng đa chiều có thể có ở phần sau, nhưng bây giờ, chúng ta sẽ tập trung vào mảng 2 chiều. Mảng 2 chiều còn được gọi là ma trận và là thứ bạn nên làm quen. Trên thực tế, đó chỉ là một cách nghĩ khác về danh sách các danh sách. Một ma trận có hàng và cột. Bằng cách chỉ định số hàng và số cột, chúng tôi có thể trích xuất một phần tử từ ma trận

Trong ma trận bên dưới, hàng đầu tiên là hàng tiêu đề và cột đầu tiên là cột


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
08

độ axit cố định độ axit dễ bay hơi axit xitric đường dư clorua lưu huỳnh đioxit tự do tổng lưu huỳnh đioxit tỷ trọng pH sunfat rượu cồn chất lượng7. 40. 7001. 90. 07611340. 99783. 510. 569. 457. 80. 8802. 60. 09825670. 99683. 200. 689. 85

Nếu chúng tôi chọn phần tử ở hàng đầu tiên và cột thứ hai, chúng tôi sẽ nhận được


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
23. Nếu chúng tôi chọn phần tử ở hàng thứ ba và cột thứ hai, chúng tôi sẽ nhận được

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
30

Trong một mảng NumPy, số thứ nguyên được gọi là thứ hạng và mỗi thứ nguyên được gọi là một trục. Vì vậy, các hàng là trục đầu tiên và các cột là trục thứ hai

Bây giờ bạn đã hiểu những kiến ​​thức cơ bản về ma trận, hãy xem cách chúng ta có thể chuyển từ danh sách các danh sách của mình sang một mảng NumPy

Tạo một mảng NumPy

Chúng ta có thể tạo một mảng NumPy bằng cách sử dụng numpy. hàm mảng. Nếu chúng ta chuyển vào một danh sách các danh sách, nó sẽ tự động tạo một mảng NumPy có cùng số hàng và số cột. Bởi vì chúng tôi muốn tất cả các phần tử trong mảng là phần tử float để dễ dàng tính toán, chúng tôi sẽ bỏ qua hàng tiêu đề chứa các chuỗi. Một trong những hạn chế của NumPy là tất cả các phần tử trong một mảng phải cùng loại, vì vậy nếu chúng ta bao gồm hàng tiêu đề, tất cả các phần tử trong mảng sẽ được đọc dưới dạng chuỗi. Bởi vì chúng tôi muốn có thể thực hiện các phép tính như tìm


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
24 trung bình của các loại rượu, chúng tôi cần tất cả các phần tử đều là số float

Trong đoạn mã dưới đây, chúng tôi

  • Nhập gói
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    32
  • Chuyển danh sách các danh sách
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    20 vào hàm
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    34, hàm này chuyển đổi nó thành một mảng NumPy
    • Loại trừ hàng tiêu đề bằng cách cắt danh sách
    • Chỉ định đối số từ khóa
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      35 để đảm bảo mỗi phần tử được chuyển đổi thành float. Chúng ta sẽ đi sâu hơn vào những gì
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      35 sau này

import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]

Hãy thử chạy đoạn mã trên và xem điều gì sẽ xảy ra

Nếu chúng tôi hiển thị


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20, bây giờ chúng tôi sẽ nhận được một mảng NumPy

wines

array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]

Chúng tôi có thể kiểm tra số lượng hàng và cột trong dữ liệu của mình bằng cách sử dụng thuộc tính hình dạng của mảng NumPy

wines.shape

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
0

Phương pháp tạo mảng NumPy thay thế

Có nhiều phương pháp mà bạn có thể sử dụng để tạo mảng NumPy. Để bắt đầu, bạn có thể tạo một mảng trong đó mọi phần tử đều bằng không. Đoạn mã dưới đây sẽ tạo một mảng có


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 hàng và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
39 cột, trong đó mọi phần tử là

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
09, sử dụng numpy. số không


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
1

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
2

Thật hữu ích khi tạo một mảng có tất cả các phần tử bằng 0 trong trường hợp bạn cần một mảng có kích thước cố định, nhưng chưa có bất kỳ giá trị nào cho nó

Bạn cũng có thể tạo một mảng trong đó mỗi phần tử là một số ngẫu nhiên bằng cách sử dụng numpy. ngẫu nhiên. rand. Đây là một ví dụ


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
3

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
4

Tạo các mảng chứa đầy các số ngẫu nhiên có thể hữu ích khi bạn muốn nhanh chóng kiểm tra mã của mình bằng các mảng mẫu

Sử dụng NumPy để đọc trong tệp

Có thể sử dụng NumPy để đọc trực tiếp csv hoặc các tệp khác vào mảng. Chúng ta có thể làm điều này bằng cách sử dụng numpy. chức năng genfromtxt. Chúng ta có thể sử dụng nó để đọc dữ liệu ban đầu về rượu vang đỏ

Trong đoạn mã dưới đây, chúng tôi

  • Sử dụng hàm
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    41 để đọc trong tệp
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    12
  • Chỉ định đối số từ khóa
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    19 để các trường được phân tích cú pháp chính xác
  • Chỉ định đối số từ khóa
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    44 để hàng tiêu đề được bỏ qua

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
5


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 cuối cùng sẽ trông giống như khi chúng ta đọc nó thành một danh sách rồi chuyển đổi nó thành một mảng float. NumPy sẽ tự động chọn kiểu dữ liệu cho các phần tử trong một mảng dựa trên định dạng của chúng

Lập chỉ mục mảng NumPy

Bây giờ chúng tôi biết cách tạo mảng, nhưng trừ khi chúng tôi có thể truy xuất kết quả từ chúng, chúng tôi không thể làm được gì nhiều với NumPy. Chúng ta có thể sử dụng lập chỉ mục mảng để chọn từng phần tử, nhóm phần tử hoặc toàn bộ hàng và cột. Một điều quan trọng cần lưu ý là giống như danh sách Python, NumPy không được lập chỉ mục, nghĩa là chỉ mục của hàng đầu tiên là


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
09 và chỉ mục của cột đầu tiên là

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
09. Nếu chúng tôi muốn làm việc với hàng thứ tư, chúng tôi sẽ sử dụng chỉ mục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11, nếu chúng tôi muốn làm việc với hàng thứ hai, chúng tôi sẽ sử dụng chỉ mục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
49, v.v. Chúng ta sẽ lại làm việc với mảng

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20

7. 40. 700. 001. 90. 07611340. 99783. 510. 569. 457. 80. 880. 002. 60. 09825670. 99683. 200. 689. 857. 80. 760. 042. 30. 09215540. 99703. 260. 659. 8511. 20. 280. 561. 90. 07517600. 99803. 160. 589. 867. 40. 700. 001. 90. 07611340. 99783. 510. 569. 45

Hãy chọn phần tử ở hàng


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 và cột

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
39. Trong đoạn mã dưới đây, chúng tôi chuyển vào chỉ mục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
53 làm chỉ mục hàng và chỉ mục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 làm chỉ mục cột. Điều này lấy giá trị từ cột thứ tư của hàng thứ ba


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
6_______0_______7

Vì chúng tôi đang làm việc với mảng 2 chiều trong NumPy, chúng tôi chỉ định 2 chỉ mục để truy xuất một phần tử. Chỉ mục đầu tiên là hàng hoặc trục


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
49, chỉ mục và chỉ mục thứ hai là cột hoặc trục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
53, chỉ mục. Bất kỳ phần tử nào trong

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 đều có thể được truy xuất bằng cách sử dụng chỉ mục

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
53

Cắt mảng NumPy

Thay vào đó, nếu chúng ta muốn chọn ba mục đầu tiên từ cột thứ tư, chúng ta có thể thực hiện bằng cách sử dụng dấu hai chấm [


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
59]. Dấu hai chấm cho biết rằng chúng tôi muốn chọn tất cả các phần tử từ chỉ mục bắt đầu cho đến nhưng không bao gồm chỉ mục kết thúc. Đây còn được gọi là lát cắt


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
8_______0_______9

Giống như với việc cắt danh sách, có thể bỏ qua


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
09 để chỉ truy xuất tất cả các phần tử từ đầu cho đến phần tử

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11

print[wines[:3]]
0_______0_______9

Chúng tôi có thể chọn toàn bộ cột bằng cách chỉ định rằng chúng tôi muốn tất cả các phần tử, từ phần đầu tiên đến phần tử cuối cùng. Chúng tôi xác định điều này bằng cách chỉ sử dụng dấu hai chấm [_______0_______59], không có chỉ số bắt đầu hoặc kết thúc. Đoạn mã dưới đây sẽ chọn toàn bộ cột thứ tư

print[wines[:3]]
2_______17_______3

Chúng tôi đã chọn toàn bộ cột ở trên, nhưng chúng tôi cũng có thể trích xuất toàn bộ hàng

print[wines[:3]]
4
print[wines[:3]]
5

Nếu chúng ta cực kỳ quan tâm đến việc lập chỉ mục, chúng ta có thể chọn toàn bộ mảng bằng cách sử dụng hai dấu hai chấm để chọn tất cả các hàng và cột trong


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20. Đây là một thủ thuật tiệc tùng hay, nhưng không có nhiều ứng dụng hay

print[wines[:3]]
6_______17_______7

Gán giá trị cho mảng NumPy

Chúng ta cũng có thể sử dụng lập chỉ mục để gán giá trị cho các phần tử nhất định trong mảng. Chúng ta có thể làm điều này bằng cách gán trực tiếp cho giá trị được lập chỉ mục

print[wines[:3]]
8

Chúng ta có thể làm tương tự cho các lát. Để ghi đè lên toàn bộ một cột, chúng ta có thể làm điều này

print[wines[:3]]
9

Đoạn mã trên ghi đè lên tất cả các giá trị trong cột thứ mười một với


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
64

Mảng NumPy 1 chiều

Cho đến giờ, chúng ta đã làm việc với mảng 2 chiều, chẳng hạn như


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20. Tuy nhiên, NumPy là một gói để làm việc với mảng nhiều chiều. Một trong những loại mảng nhiều chiều phổ biến nhất là mảng 1 chiều, hoặc véc tơ. Như bạn có thể nhận thấy ở trên, khi chúng tôi cắt _______ 0_______20, chúng tôi đã truy xuất một mảng 1 chiều. Mảng 1 chiều chỉ cần một chỉ số duy nhất để truy xuất một phần tử. Mỗi hàng và cột trong mảng 2 chiều là mảng 1 chiều. Giống như danh sách các danh sách tương tự như mảng 2 chiều, danh sách đơn tương tự như mảng 1 chiều. Nếu chúng ta cắt các loại rượu và chỉ truy xuất hàng thứ ba, chúng ta sẽ nhận được mảng 1 chiều

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
0

Đây là cách


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
67 trông

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
1

Chúng tôi có thể truy xuất các phần tử riêng lẻ từ


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
67 bằng một chỉ mục duy nhất. Đoạn mã dưới đây sẽ hiển thị mục thứ hai trong

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
67

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
2
[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
3

Hầu hết các chức năng NumPy mà chúng tôi đã làm việc cùng, chẳng hạn như numpy. ngẫu nhiên. rand, có thể được sử dụng với mảng nhiều chiều. Đây là cách chúng tôi sử dụng


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
70 để tạo một vectơ ngẫu nhiên

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
4
[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
5

Trước đây, khi gọi


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
71, chúng ta đã truyền vào một hình dạng cho mảng 2 chiều, vì vậy kết quả là một mảng 2 chiều. Lần này, chúng ta truyền vào một hình dạng cho mảng một chiều. Hình dạng chỉ định số lượng kích thước và kích thước của mảng trong mỗi kích thước. Một hình dạng của

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
72 sẽ là một mảng 2 chiều với

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10 hàng và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10 cột. Một hình dạng của

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
75 sẽ là một mảng 1 chiều với

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10 phần tử

Trường hợp NumPy trở nên phức tạp hơn là khi chúng ta bắt đầu xử lý các mảng có nhiều hơn _________53 chiều

Mảng NumPy N chiều

Điều này không xảy ra thường xuyên, nhưng có những trường hợp bạn sẽ muốn xử lý các mảng có lớn hơn _______ 11 kích thước. Một cách để nghĩ về điều này là một danh sách các danh sách. Giả sử chúng tôi muốn lưu trữ thu nhập hàng tháng của một cửa hàng, nhưng chúng tôi muốn có thể nhanh chóng tra cứu kết quả trong một quý và trong một năm. Thu nhập trong một năm có thể trông như thế này

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
6

Cửa hàng đã kiếm được _______79 vào tháng 1, _______80 vào tháng 2, v.v. Chúng tôi có thể chia các khoản thu nhập này theo quý thành một danh sách các danh sách

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
7

Chúng tôi có thể truy xuất thu nhập từ tháng 1 bằng cách gọi tới số


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
81. Nếu chúng tôi muốn biết kết quả của cả quý, chúng tôi có thể gọi cho

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
82 hoặc

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
83. Bây giờ chúng ta có một mảng 2 chiều hoặc ma trận. Nhưng nếu bây giờ chúng ta muốn thêm kết quả từ một năm khác thì sao?

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
8

Chúng tôi có thể truy xuất số tiền kiếm được từ tháng 1 của năm đầu tiên bằng cách gọi tới số


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
84. Bây giờ chúng ta cần ba chỉ mục để truy xuất một phần tử. Một mảng ba chiều trong NumPy cũng giống như vậy. Trên thực tế, chúng ta có thể chuyển đổi

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
85 thành một mảng và sau đó lấy thu nhập cho tháng 1 của năm đầu tiên

[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], ['7.4', '0.7', '0', '1.9', '0.076', '11', '34', '0.9978', '3.51', '0.56', '9.4', '5'], ['7.8', '0.88', '0', '2.6', '0.098', '25', '67', '0.9968', '3.2', '0.68', '9.8', '5']]
9
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
0

Chúng ta cũng có thể tìm thấy hình dạng của mảng

qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
1
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
2

Lập chỉ mục và cắt hoạt động theo cùng một cách chính xác với mảng 3 chiều, nhưng bây giờ chúng ta có thêm một trục để chuyển vào. Nếu chúng tôi muốn nhận thu nhập cho tháng Giêng của tất cả các năm, chúng tôi có thể làm điều này

qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
3
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
4

Nếu chúng tôi muốn nhận được thu nhập quý đầu tiên từ cả hai năm, chúng tôi có thể làm điều này

qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
5
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
6

Việc thêm nhiều thứ nguyên hơn có thể giúp truy vấn dữ liệu của bạn dễ dàng hơn nhiều nếu dữ liệu được sắp xếp theo một cách nhất định. Khi chúng ta chuyển từ mảng 3 chiều sang mảng 4 chiều và mảng lớn hơn, các thuộc tính tương tự sẽ được áp dụng và chúng có thể được lập chỉ mục và cắt theo cùng một cách

Kiểu dữ liệu NumPy

Như chúng tôi đã đề cập trước đó, mỗi mảng NumPy có thể lưu trữ các phần tử của một kiểu dữ liệu. Ví dụ:


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 chỉ chứa các giá trị float. NumPy lưu trữ các giá trị bằng cách sử dụng các kiểu dữ liệu riêng của nó, khác với các kiểu Python như

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
87 và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
88. Điều này là do lõi của NumPy được viết bằng ngôn ngữ lập trình có tên C, ngôn ngữ này lưu trữ dữ liệu khác với các loại dữ liệu Python. Ánh xạ kiểu dữ liệu NumPy giữa Python và C, cho phép chúng tôi sử dụng mảng NumPy mà không gặp bất kỳ trở ngại chuyển đổi nào

Bạn có thể tìm thấy kiểu dữ liệu của mảng NumPy bằng cách truy cập thuộc tính dtype

qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
7
qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
8

NumPy có một số loại dữ liệu khác nhau, chủ yếu ánh xạ tới các loại dữ liệu Python, như


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
87 và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
88. Bạn có thể tìm thấy danh sách đầy đủ các loại dữ liệu NumPy tại đây, nhưng đây là một số loại quan trọng

  • 
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    87 — dữ liệu số dấu phẩy động
  • 
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    92 — dữ liệu số nguyên
  • 
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    93 — dữ liệu ký tự
  • 
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    94 — Các đối tượng Python

Ngoài ra, các loại dữ liệu kết thúc bằng một hậu tố cho biết chúng chiếm bao nhiêu bit bộ nhớ. Vì vậy,


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
95 là kiểu dữ liệu số nguyên 32 bit và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
96 là kiểu dữ liệu float

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
97 bit

Chuyển đổi kiểu dữ liệu

Bạn có thể sử dụng numpy. ndarray. phương thức astype để chuyển đổi một mảng thành một kiểu khác. Phương thức sẽ thực sự sao chép mảng và trả về một mảng mới với kiểu dữ liệu đã chỉ định. Chẳng hạn, chúng ta có thể chuyển đổi


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 thành kiểu dữ liệu

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
92

qualities =
[float[item[-1]] for item in wines[1:]]
sum[qualities] / len[qualities]
9
5.6360225140712945
0

Như bạn có thể thấy ở trên, tất cả các mục trong mảng kết quả là số nguyên. Lưu ý rằng chúng tôi đã sử dụng loại Python


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
92 thay vì loại dữ liệu NumPy khi chuyển đổi

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20. Điều này là do một số loại dữ liệu Python, bao gồm

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
87,

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
92 và

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
93, có thể được sử dụng với NumPy và được tự động chuyển đổi thành loại dữ liệu NumPy

Chúng ta có thể kiểm tra thuộc tính của mảng kết quả để xem kiểu dữ liệu nào NumPy đã ánh xạ mảng kết quả tới

5.6360225140712945
1_______26_______2

Mảng đã được chuyển đổi sang kiểu dữ liệu số nguyên 64 bit. Điều này cho phép các giá trị số nguyên rất dài, nhưng chiếm nhiều dung lượng trong bộ nhớ hơn là lưu trữ các giá trị dưới dạng số nguyên 32 bit

Nếu bạn muốn kiểm soát nhiều hơn cách mảng được lưu trữ trong bộ nhớ, bạn có thể trực tiếp tạo các đối tượng dtype NumPy như numpy. int32

5.6360225140712945
3_______26_______4

Bạn có thể sử dụng chúng trực tiếp để chuyển đổi giữa các loại

5.6360225140712945
5
5.6360225140712945
6

Hoạt động mảng NumPy

NumPy làm cho việc thực hiện các phép toán trên mảng trở nên đơn giản. Đây là một trong những ưu điểm chính của NumPy và giúp tính toán khá dễ dàng

Toán mảng đơn

Nếu bạn thực hiện bất kỳ phép toán cơ bản nào [

print[wines[:3]]
05,
print[wines[:3]]
06,
print[wines[:3]]
07,
print[wines[:3]]
08,
print[wines[:3]]
09] với một mảng và một giá trị, nó sẽ áp dụng phép toán đó cho từng phần tử trong mảng

Giả sử chúng tôi muốn thêm _______ 10 điểm vào mỗi điểm chất lượng vì chúng tôi say và cảm thấy hào phóng. Đây là cách chúng tôi làm điều đó

5.6360225140712945
7
5.6360225140712945
8

Lưu ý rằng thao tác trên sẽ không thay đổi mảng


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 — nó sẽ trả về một mảng 1 chiều mới trong đó

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10 đã được thêm vào từng phần tử trong cột chất lượng rượu vang

Thay vào đó, nếu chúng tôi đã làm

print[wines[:3]]
13, chúng tôi sẽ sửa đổi mảng tại chỗ

5.6360225140712945
9
5.6360225140712945
8

Tất cả các hoạt động khác hoạt động theo cùng một cách. Ví dụ: nếu chúng tôi muốn nhân mỗi điểm chất lượng với


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
53, chúng tôi có thể thực hiện như sau


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
1____36_______2

Toán nhiều mảng

Cũng có thể thực hiện các phép toán giữa các mảng. Điều này sẽ áp dụng thao tác cho các cặp phần tử. Ví dụ: nếu chúng tôi thêm cột


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
24 vào chính nó, đây là những gì chúng tôi nhận được


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
3_______36_______4

Lưu ý rằng điều này tương đương với

print[wines[:3]]
16 — điều này là do NumPy thêm từng cặp phần tử. Phần tử đầu tiên trong mảng thứ nhất được thêm vào phần tử đầu tiên trong mảng thứ hai, phần tử thứ hai đến phần tử thứ hai, v.v.

Chúng ta cũng có thể sử dụng điều này để nhân mảng. Giả sử chúng ta muốn chọn một loại rượu có hàm lượng và chất lượng cồn tối đa [chúng ta muốn say, nhưng chúng ta sang trọng]. Chúng tôi sẽ nhân

print[wines[:3]]
17 với

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
24 và chọn loại rượu có số điểm cao nhất


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
5

import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
6

Tất cả các hoạt động phổ biến [

print[wines[:3]]
05,
print[wines[:3]]
06,
print[wines[:3]]
07,
print[wines[:3]]
08,
print[wines[:3]]
09] sẽ hoạt động giữa các mảng

Phát thanh truyền hình

Trừ khi các mảng mà bạn đang thao tác có cùng kích thước chính xác, nếu không thì không thể thực hiện các thao tác theo phần tử. Trong những trường hợp như thế này, NumPy thực hiện phát sóng để cố gắng khớp các phần tử. Về cơ bản, phát sóng bao gồm một số bước

  • Kích thước cuối cùng của mỗi mảng được so sánh
    • Nếu chiều dài các chiều bằng nhau hoặc một trong các chiều có chiều dài
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      49, thì chúng ta tiếp tục
    • Nếu độ dài của các thứ nguyên không bằng nhau và không có thứ nguyên nào có độ dài
      
      import csv
      with open['winequality-red.csv', 'r'] as f:
          wines = list[csv.reader[f, delimiter=';']]
      
      49, thì sẽ xảy ra lỗi
  • Tiếp tục kiểm tra thứ nguyên cho đến khi mảng ngắn nhất hết thứ nguyên

Ví dụ: hai hình dạng sau đây tương thích


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
7

Điều này là do độ dài của kích thước theo sau của mảng

print[wines[:3]]
26 là

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11 và độ dài của kích thước theo sau của mảng
print[wines[:3]]
28 là

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
11. Chúng bằng nhau, vì vậy kích thước đó là được. Mảng
print[wines[:3]]
28 sau đó không còn phần tử, vì vậy chúng tôi không sao và các mảng tương thích với các phép toán

Hai hình dạng sau đây cũng tương thích


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
8

Kích thước cuối cùng phù hợp và

print[wines[:3]]
26 có độ dài

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
49 trong kích thước đầu tiên

Hai mảng này không khớp


import csv
with open["winequality-red.csv", 'r'] as f:
    wines = list[csv.reader[f, delimiter=";"]]
import numpy as np
wines = np.array[wines[1:], dtype=np.float]
9

Độ dài của các thứ nguyên không bằng nhau và không có mảng nào có độ dài thứ nguyên bằng


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
49

Có một lời giải thích chi tiết về phát sóng ở đây, nhưng chúng ta sẽ đi qua một vài ví dụ để minh họa nguyên tắc

wines
0
wines
1

Ví dụ trên không hoạt động vì hai mảng không có thứ nguyên ở cuối phù hợp. Đây là một ví dụ trong đó thứ nguyên cuối cùng khớp với nhau

wines
2
wines
3

Như bạn có thể thấy,

print[wines[:3]]
34 đã được phát trên mỗi hàng của
print[wines[:3]]
35. Đây là một ví dụ với dữ liệu

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 của chúng tôi

wines
4
wines
5

Các phần tử của

print[wines[:3]]
37 được phát trên mỗi hàng của

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20, vì vậy cột đầu tiên của

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 có giá trị đầu tiên trong
print[wines[:3]]
37 được thêm vào, v.v.

Phương thức mảng NumPy

Ngoài các phép toán phổ biến, NumPy còn có một số phương thức mà bạn có thể sử dụng cho các phép tính phức tạp hơn trên mảng. Một ví dụ về điều này là numpy. ndarray. phương pháp tính tổng. Điều này tìm thấy tổng của tất cả các phần tử trong một mảng theo mặc định

wines
6
wines
7

Tổng tất cả các xếp hạng chất lượng của chúng tôi là

print[wines[:3]]
41. Chúng ta có thể chuyển đối số từ khóa
print[wines[:3]]
42 vào phương thức
print[wines[:3]]
43 để tìm tổng trên một trục. Nếu chúng ta gọi
print[wines[:3]]
43 qua ma trận

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 và chuyển vào
print[wines[:3]]
46, chúng ta sẽ tìm thấy các tổng trên trục đầu tiên của mảng. Điều này sẽ cung cấp cho chúng tôi tổng của tất cả các giá trị trong mỗi cột. Điều này có vẻ ngược lại rằng tổng trên trục đầu tiên sẽ cho chúng ta tổng của mỗi cột, nhưng có một cách để nghĩ về điều này là trục được chỉ định là trục “biến mất”. Vì vậy, nếu chúng tôi chỉ định
print[wines[:3]]
46, chúng tôi muốn các hàng biến mất và chúng tôi muốn tìm tổng cho từng trục còn lại trên mỗi hàng

wines
8
wines
9

Chúng tôi có thể xác minh rằng chúng tôi đã tính tổng chính xác bằng cách kiểm tra hình dạng. Hình dạng phải là


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
15, tương ứng với số lượng cột


array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
0

array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
1

Nếu chúng ta chuyển vào

print[wines[:3]]
49, chúng ta sẽ tìm thấy tổng trên trục thứ hai của mảng. Điều này sẽ cho chúng ta tổng của mỗi hàng


array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
2______39_______3

Có một số phương pháp khác hoạt động giống như phương pháp

print[wines[:3]]
43, bao gồm

  • - tìm giá trị trung bình của một mảng
  • cục mịch. ndarray. std - tìm độ lệch chuẩn của một mảng
  • cục mịch. ndarray. min — tìm giá trị nhỏ nhất trong một mảng
  • cục mịch. ndarray. max — tìm giá trị lớn nhất trong một mảng

Bạn có thể tìm thấy danh sách đầy đủ các phương thức mảng tại đây

So sánh mảng NumPy

NumPy cho phép kiểm tra xem các hàng có khớp với các giá trị nhất định hay không bằng cách sử dụng các phép so sánh toán học như

print[wines[:3]]
51,
print[wines[:3]]
52,
print[wines[:3]]
53,
print[wines[:3]]
54 và
print[wines[:3]]
55. Ví dụ: nếu chúng tôi muốn xem loại rượu nào có xếp hạng chất lượng cao hơn
print[wines[:3]]
56, chúng tôi có thể làm điều này


array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
4_______39_______5

Chúng tôi nhận được một mảng Boolean cho chúng tôi biết loại rượu nào có xếp hạng chất lượng cao hơn

print[wines[:3]]
56. Chúng ta có thể làm điều gì đó tương tự với các toán tử khác. Chẳng hạn, chúng ta có thể xem liệu có loại rượu nào có xếp hạng chất lượng bằng

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
10


array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
6

array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
7

tập hợp con

Một trong những điều mạnh mẽ mà chúng ta có thể làm với mảng Boolean và mảng NumPy là chỉ chọn một số hàng hoặc cột nhất định trong mảng NumPy. Ví dụ: mã bên dưới sẽ chỉ chọn các hàng trong


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 khi chất lượng vượt quá
print[wines[:3]]
60


array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
8

array[[[ 7.4 , 0.7 , 0. , ..., 0.56 , 9.4 , 5. ],
[ 7.8 , 0.88 , 0. , ..., 0.68 , 9.8 , 5. ],
[ 7.8 , 0.76 , 0.04 , ..., 0.65 , 9.8 , 5. ],
...,
[ 6.3 , 0.51 , 0.13 , ..., 0.75 , 11. , 6. ],
[ 5.9 , 0.645, 0.12 , ..., 0.71 , 10.2 , 5. ],
[ 6. , 0.31 , 0.47 , ..., 0.66 , 11. , 6. ]]]
9

Chúng tôi chỉ chọn những hàng nơi

print[wines[:3]]
61 chứa giá trị
print[wines[:3]]
62 và tất cả các cột. Tập hợp con này làm cho việc lọc các mảng theo các tiêu chí nhất định trở nên đơn giản. Ví dụ, chúng ta có thể tìm kiếm các loại rượu có nhiều cồn và chất lượng cao. Để chỉ định nhiều điều kiện, chúng ta phải đặt từng điều kiện trong ngoặc đơn và tách các điều kiện bằng dấu và [
print[wines[:3]]
63]

wines.shape
0_______40_______1

Chúng ta có thể kết hợp đặt con và gán để ghi đè lên một số giá trị nhất định trong một mảng

wines.shape
2

Định hình lại mảng NumPy

Chúng ta có thể thay đổi hình dạng của mảng trong khi vẫn giữ nguyên tất cả các phần tử của chúng. Điều này thường có thể giúp truy cập các phần tử mảng dễ dàng hơn. Định hình lại đơn giản nhất là lật các trục, để hàng trở thành cột và ngược lại. Chúng ta có thể thực hiện điều này với numpy. chức năng chuyển vị

wines.shape
3
wines.shape
4

Chúng ta có thể sử dụng numpy. hàm ravel để biến một mảng thành biểu diễn một chiều. Về cơ bản, nó sẽ làm phẳng một mảng thành một chuỗi dài các giá trị

wines.shape
5
wines.shape
6

Đây là một ví dụ mà chúng ta có thể thấy thứ tự của

print[wines[:3]]
64

wines.shape
7_______40_______8

Cuối cùng, chúng ta có thể sử dụng hàm để định hình lại một mảng thành một hình dạng nhất định mà chúng ta chỉ định. Đoạn mã dưới đây sẽ biến hàng thứ hai của


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 thành một mảng 2 chiều với

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
53 hàng và
print[wines[:3]]
67 cột

wines.shape
9_______0_______00

Kết hợp mảng NumPy

Với NumPy, việc kết hợp nhiều mảng thành một mảng thống nhất là rất phổ biến. Chúng ta có thể sử dụng numpy. vstack để xếp nhiều mảng theo chiều dọc. Hãy coi nó giống như các phần tử của mảng thứ hai được thêm vào dưới dạng các hàng mới cho mảng đầu tiên. Chúng ta có thể đọc trong tập dữ liệu

print[wines[:3]]
68 chứa thông tin về chất lượng của rượu vang trắng, sau đó kết hợp nó với tập dữ liệu hiện có của chúng tôi,

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20, chứa thông tin về rượu vang đỏ

Trong đoạn mã dưới đây, chúng tôi

  • Đọc trong
    print[wines[:3]]
    68
  • Hiển thị hình dạng của
    print[wines[:3]]
    71

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
01____0_______02

Như bạn có thể thấy, chúng tôi có các thuộc tính cho rượu vang

print[wines[:3]]
72. Bây giờ chúng ta có dữ liệu về rượu vang trắng, chúng ta có thể kết hợp tất cả dữ liệu về rượu vang

Trong đoạn mã dưới đây, chúng tôi

  • Sử dụng hàm
    print[wines[:3]]
    73 để kết hợp
    
    import csv
    with open['winequality-red.csv', 'r'] as f:
        wines = list[csv.reader[f, delimiter=';']]
    
    20 và
    print[wines[:3]]
    71
  • Hiển thị hình dạng của kết quả

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
03____0_______04

Như bạn có thể thấy, kết quả có

print[wines[:3]]
76 hàng, là tổng của số hàng trong

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
20 và số hàng trong
print[wines[:3]]
78

Nếu chúng ta muốn kết hợp các mảng theo chiều ngang, trong đó số hàng không đổi nhưng các cột được nối với nhau, thì chúng ta có thể sử dụng numpy. hàm hstack. Các mảng chúng ta kết hợp cần phải có cùng số hàng để làm việc này

Cuối cùng, chúng ta có thể sử dụng như một phiên bản mục đích chung của

print[wines[:3]]
79 và
print[wines[:3]]
73. Nếu chúng ta muốn nối hai mảng, chúng ta chuyển chúng vào
print[wines[:3]]
81, sau đó chỉ định đối số từ khóa
print[wines[:3]]
42 mà chúng ta muốn nối cùng. Nối dọc theo trục thứ nhất tương tự như
print[wines[:3]]
73 và nối dọc theo trục thứ hai tương tự như
print[wines[:3]]
79


import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
05

import csv
with open['winequality-red.csv', 'r'] as f:
    wines = list[csv.reader[f, delimiter=';']]
06

Bảng cheat NumPy miễn phí

Nếu bạn muốn tìm hiểu thêm về NumPy, hãy xem khóa học tương tác của chúng tôi về NumPy và Pandas. Bạn có thể đăng ký và thực hành những bài học đầu tiên miễn phí

Bạn cũng có thể muốn nâng kỹ năng NumPy của mình lên một tầm cao mới với bảng cheat NumPy miễn phí của chúng tôi

Đọc thêm

Bây giờ bạn đã hiểu rõ về NumPy và cách áp dụng nó vào tập dữ liệu

Nếu bạn muốn tìm hiểu sâu hơn, đây là một số tài nguyên có thể hữu ích

  • NumPy Quickstart — có các ví dụ mã hay và bao gồm hầu hết chức năng NumPy cơ bản
  • — một hướng dẫn tuyệt vời về NumPy và các thư viện Python khác
  • Visual NumPy Introduction — hướng dẫn sử dụng trò chơi cuộc sống để minh họa các khái niệm NumPy

Trong hướng dẫn tiếp theo của chúng tôi, chúng tôi đi sâu hơn vào Pandas, một thư viện được xây dựng trên NumPy và làm cho việc phân tích dữ liệu trở nên dễ dàng hơn. Nó giải quyết hai trong số những điểm đau lớn nhất đó là

  • Bạn không thể trộn nhiều loại dữ liệu trong một mảng
  • Bạn phải nhớ loại dữ liệu mà mỗi cột chứa

Học Python đúng cách

Học Python bằng cách viết mã Python từ ngày đầu tiên, ngay trong cửa sổ trình duyệt của bạn. Đó là cách tốt nhất để học Python — hãy tự mình khám phá một trong hơn 60 bài học miễn phí của chúng tôi

Việc sử dụng NP trong Python là gì?

NumPy là thư viện Python dùng để làm việc với mảng . Nó cũng có các chức năng để làm việc trong miền đại số tuyến tính, biến đổi phạm vi và ma trận. NumPy được tạo ra vào năm 2005 bởi Travis Oliphant. Nó là một dự án mã nguồn mở và bạn có thể sử dụng nó một cách tự do.

NumPy quan trọng như thế nào trong Python?

Numpy là một trong những gói được sử dụng phổ biến nhất cho tính toán khoa học bằng Python . Nó cung cấp một đối tượng mảng nhiều chiều, cũng như các biến thể như mặt nạ và ma trận, có thể được sử dụng cho các hoạt động toán học khác nhau.

Tại sao NumPy lại mạnh như vậy?

Mảng NumPy nhanh hơn Danh sách Python vì những lý do sau. Mảng là tập hợp các kiểu dữ liệu đồng nhất được lưu trữ trong các vị trí bộ nhớ liền kề . Mặt khác, một danh sách trong Python là một tập hợp các kiểu dữ liệu không đồng nhất được lưu trữ trong các vị trí bộ nhớ không liền kề.

Tại sao chúng ta nên sử dụng NumPy?

NumPy chứa cấu trúc dữ liệu ma trận và mảng đa chiều. Nó có thể được sử dụng để thực hiện một số phép toán trên mảng chẳng hạn như các quy trình lượng giác, thống kê và đại số . Do đó, thư viện chứa một số lượng lớn các hàm toán học, đại số và biến đổi.

Chủ Đề