01_NumPy介紹,什麼是NumPy,Python應用、(NumPy、SciPy、Matplotlib相關網址)--來自菜鳥和NumPy中文網

轉自:https://www.runoob.com/numpy/numpy-tutorial.html
https://www.numpy.org.cn/article/basics/understanding_numpy.html#什麼是-numpy
(怕後面該網址沒有了,轉載作爲自己的學習筆記)

1、NumPy教程

NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005 年,Travis Oliphant 在 Numeric 中結合了另一個同性質的程序庫 Numarray 的特色,並加入了其它擴展而開發了 NumPy。NumPy 爲開放源代碼並且由許多協作者共同維護開發。

NumPy是一個運行速度非常快的數學庫,主要用於數組計算,包含:
一個強大的N維數組對象ndarray
廣播功能函數
整合C/C++/Fortran代碼的工具
線性代數、傅里葉函數、隨機數生成等功能

1.1、什麼是Numpy?

NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程序員輕鬆地進行數值計算。這類數值計算廣泛用於以下任務:

機器學習模型:在編寫機器學習算法時,需要對矩陣進行各種數值計算。例如矩陣乘法、換位、加法等。NumPy提供了一個非常好的庫,用於簡單(在編寫代碼方面)和快速(在速度方面)計算。NumPy數組用於存儲訓練數據和機器學習模型的參數。

圖像處理和計算機圖形學:計算機中的圖像表示爲多維數字數組。NumPy成爲同樣情況下最自然的選擇。實際上,NumPy提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等。

數學任務:NumPy對於執行各種數學任務非常有用,如數值積分、微分、內插、外推等。因此,當涉及到數學任務時,它形成了一種基於Python的MATLAB的快速替代。

1.2、NumPy應用

NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用於替代 MatLab,是一個強大的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。

SciPy 是一個開源的 Python 算法庫和數學工具包。

SciPy 包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。

Matplotlib 是 Python 編程語言及其數值數學擴展包 NumPy 的可視化操作界面。它爲利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 嚮應用程序嵌入式繪圖提供了應用程序接口(API)。

1.3、相關鏈接

  • NumPy 官網 http://www.numpy.org/
  • NumPy 源代碼:https://github.com/numpy/numpy
  • SciPy 官網:https://www.scipy.org/
  • SciPy 源代碼:https://github.com/scipy/scipy
  • Matplotlib 官網:https://matplotlib.org/
  • Matplotlib 源代碼:https://github.com/matplotlib/matplotlib

1.4 NumPy安裝

在你的計算機上安裝NumPy的最快也是最簡單的方法是在shell上使用以下命令:

pip install numpy

這將在你的計算機上安裝最新/最穩定的NumPy版本。通過PIP安裝是安裝任何Python軟件包的最簡單方法。現在讓我們來談談NumPy中最重要的概念,NumPy數組。

如果是Anacanda中使用conda安裝的話,命令是:

conda install numpy

在這裏插入圖片描述

1.5 NumPy中的數組

NumPy提供的最重要的數據結構是一個稱爲NumPy數組的強大對象。NumPy數組是通常的Python數組的擴展。NumPy數組配備了大量的函數和運算符,可以幫助我們快速編寫上面討論過的各種類型計算的高性能代碼。讓我們看看如何快速定義一維NumPy數組:

# -*- coding: UTF-8 -*-

import numpy as np
my_array = np.array([1,2,3,4,5])
print(my_array)

最後,運行結果如下:

Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.
PyDev console: using IPython 7.8.0
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] on win32
In[2]: runfile('E:/workspace/numpy/numpy/01_numpy數組.py', wdir='E:/workspace/numpy/numpy')
[1 2 3 4 5]

在上面的簡單示例中,我們首先使用import numpy作爲np導入NumPy庫。然後,我們創建了一個包含5個整數的簡單NumPy數組,然後我們將其打印出來。繼續在自己的機器上試一試。在看 “NumPy安裝” 部分下面的步驟的時候,請確保已在計算機中安裝了NumPy。

現在讓我們看看我們可以用這個特定的NumPy數組能做些什麼。

print(my_array.shape)

它會打印我們創建的數組的形狀:(5,)。意思就是my_array是一個包含5個元素的數組。
我們也可以打印各個元素。就像普通的Python數組一樣,NumPy數組的起始索引編號爲0.

print(my_array[0])
print(my_array[1])

運行結果是:

1
2

上述命令將分別在終端上打印1和2.我們還可以修改NumPy數組的元素。例如,加入我們編寫以下2個命令:

my_array[0] = -1
print(my_array)

我們將在屏幕上看到:[-1 2 3 4 5]
現在假設,我們要創建一個長度爲5的NumPy數組,但所有元素都爲0,我們可以這樣做嗎?是的。NumPy提供了一種簡單的方法來做同樣的事情。

my_new_array = np.zeros((5))
print(my_new_array)

我們將看到輸出了[0. 0. 0. 0. 0.]。與np.zeros類似,我們也有np.ones。如果我們想創建一個隨機值數組怎麼辦?

my_random_array = np.random.random((5))
print(my_random_array)

我們得到的輸出看起來像 [0.22051844 0.35278286 0.11342404 0.79671772 0.62263151] 這樣的數據。你獲得的輸出可能會有所不同,因爲我們使用的是隨機函數,它爲每個元素分配0到1之間的隨機值。

現在讓我們看看如何使用NumPy創建二維數組。

my_2d_array = np.zeros((2,3))
print(my_2d_array)

這裏是:

[[0. 0. 0.]
 [0. 0. 0.]]

猜猜以下代碼的輸出結果如何:

my_2d_array_new = np.ones((2,4))
print(my_2d_array_new)

這裏是:

[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

基本上,當你使用函數np.zeros()或np.ones()時,你可以指定討論數組大小的元組。在上面的兩個例子中,我們使用以下元組,(2, 3) 和(2, 4) 分別表示2行,3列和4列。像上面那樣的多維數組可以用 my_array[i][j] 符號來索引,其中i表示行號,j表示列號。i和j都從0開始。

my_array = np.array([[4,5],[6,1]])
print(my_array)
print(my_array[0][1])

輸出結果是:

[[4 5]
 [6 1]]
5

上面的代碼片段的輸出是5,因爲它是索引0行和索引1列中的元素。
你還可以按如下方式打印my_array的形狀:

print(my_array.shape)

輸出爲(2,2),表示數組中有2行2列。

NumPy提供了一種提取多維數組的列/列的強大方法。例如,考慮我們上面定義的my_array的例子。

[[4,5],[6,1]]

假設,我們想從中提取第二列(索引1)的所有元素。在這裏,我們肉眼可以看見,第二列由兩個元素組成:5和1。爲此,我們執行以下操作:

my_array_column_2 = my_array[:,1]
print(my_array_column_2)

注意,我們使用了冒號(:)而不是行號,而對於列號,我們使用了值1,最終輸出是:[5, 1]。

我們可以類似地從多維NumPy數組中提取一行。現在,讓我們看看NumPy在多個數組上執行計算時提供的強大功能。

1.6 NumPy中的數組操作

使用NumPy,你可以輕鬆在數組上執行數學運算。例如,你可以添加NumPy數組,你可以減去它們,你可以將它們相乘,甚至可以將它們分開。以下是一些例子:

# -*- coding: UTF-8 -*-

import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b
difference = a - b
product = a * b
quotient = a / b

print("Sum = \n",sum)
print("Difference = \n", difference)
print("Product = \n", product)
print("Quotient = \n", quotient)

運行結果:

Sum = 
 [[ 6.  8.]
 [10. 12.]]
Difference = 
 [[-4. -4.]
 [-4. -4.]]
Product = 
 [[ 5. 12.]
 [21. 32.]]
Quotient = 
 [[0.2        0.33333333]
 [0.42857143 0.5       ]]

如你所見,乘法運算符執行逐元素乘法而不是矩陣乘法。要執行矩陣乘法,你可以執行以下操作:

matrix_product = a.dot(b)
print("Matrix Product = ",matrix_product)

運行結果:

Matrix Product =  [[19. 22.]
 [43. 50.]]
發佈了1050 篇原創文章 · 獲贊 333 · 訪問量 388萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章