numpy科學計算入門

爲什麼要用numpy?

NumPy是一個開源的Python科學計算基礎庫,包含:
• 一個強大的N維數組對象 ndarray • 廣播功能函數 • 整合C/C

小例子

import numpy as np
import time
start =time.time()
a =np.array([1,2,3,4])
b = np.array([1,2,3,4])
c =a**2+b**2
end =time.time()
timespeed =end -start
print(timespeed)
0.0004971027374267578

大家可以用列表進行同樣的計算,對比一下花費的時間,numpy做這些方面的計算花費時間很少,這也是我們爲什麼要用numpy的原因,在進行數據分析的過程中,時間也是很重要。
下面我帶大家一起來學習一下numpy中的ndarray數組

N維數組對象:ndarray

ndarray是一個多維數組對象,由兩部分構成: • 實際的數據 • 描述這些數據的元數據(數據維度、數據類型等)
ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始。
我後面所有的代碼都是在jupyter上面做的,所以大家可以做一下準備工作。

#顯示所有變量
from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all'

這個是爲了方面查看輸出的值,個人比較懶,不想用print()一一打印。

ndarray基本屬性

import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8]])#np.array()生成一個ndarray數組,在python別名叫做array
a
#五大屬性
a.shape#ndarray對象的的尺度,對應矩陣的m行列
a.ndim#軸的數量或者維度的數量(秩)
a.size#每個ndarray對象元素的個數(大小)
a.dtype#元素的數據類型
a.itemsize#ndarray對象中每個元素的大小,以字節爲單位

下面是輸出結果,上面的屬性我都進行了介紹,就不重複了。
在這裏插入圖片描述

ndarray數據類型

類型	類型代碼	說明
int8、uint8	i1、u1	有符號和無符號的8位(1個字節)整型
int16、uint16	i2、u2	有符號和無符號的16位(2個字節)整型
int32、uint32	i4、u4	有符號和無符號的32位(4個字節)整型
int64、unint64	i8、u8	有符號和無符號的64位(8個字節)整型
float16  	f2	半精度浮點數
float32	f4或f	
標準的單精度浮點數。與C的float兼容

float64	f8或d	標準的雙精度浮點數。與C的double和Python的float對象兼容
float128	f16或g	擴展精度浮點數
complex64、complex128、complex256	c8、c16、c32	分別用兩個32位、64位或128位浮點數表示的複數
bool  	?	存儲True和False值的布爾類型
object	O	Python對象類型
string_	S	固定長度的字符串長度(每個字符1個字節)。例如,要創建一個長度爲10的字符串,應使用S10
unicode_	U	固定長度的unicode長度(字節數由平臺決定)。跟字符串的定義方式一樣(如U10)

ndarray的元素類型 ndarray爲什麼要支持這麼多種元素類型?
對比:Python語法僅支持整數、浮點數和複數3種類型
• 科學計算涉及數據較多,對存儲和性能都有較高要求
• 對元素類型精細定義,有助於NumPy合理使用存儲空間並優化性能
• 對元素類型精細定義,有助於程序員對程序規模有合理評估
numpy一般不建議非同質類型的ndarray數組進行計算,這樣它的優勢就體現不出來。與普通列表,元組計算沒有區別。
ndarray數組可以由非同質對象構成,非同質ndarray元素爲對象類型,非同質ndarray對象無法有效發揮NumPy優勢,儘量避免使用。
在這裏插入圖片描述
看一下這個例子就很清晰了。下面我們來看一下ndarray數組的創建。

ndarray數組的創建

創建的四種方法

• 從Python中的列表、元組等類型創建ndarray數組
• 使用NumPy中函數創建ndarray數組,如:arange, ones, zeros等
• 從字節流(raw bytes)中創建ndarray數組
• 從文件中讀取特定格式,創建ndarray數組

1.從Python中的列表、元組等類型創建ndarray數組
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)
當np.array()不指定dtype時,NumPy將根據數據情況關聯一個dtype類型

一般默認的是浮點數類型,因爲常用的數據在科學計算中大多數是浮點數類型,很少用到是整數類型。
在這裏插入圖片描述

2.使用NumPy中函數創建ndarray數組,如:arange, ones, zeros等

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這些都是一些基礎的生成數組操作,也是我們後面科學計算的基礎,做好這個我們纔有可以能接着後面的操作,上面的函數我都一一註釋了,就不過過多的重複,我繼續重複幾個操作,控制生成數組的形式,以及用一些基礎的函數。
在這裏插入圖片描述

3.使用NumPy中其他函數創建ndarray數組

在這裏插入圖片描述
實際本質也是差不多的。
第四種從文件中創建後面具體實例時我會仔細講一下。

接下來我們談一下數組的變換,這個也是爲後面計算做鋪墊的。

ndarray數組的變換

對於創建後的ndarray數組,可以對其進行維度變換和元素類型變換,這一點在python科學計算和機器學習,深度學習都是非常重要的一部分。
1.維度變換

在這裏插入圖片描述
在這裏插入圖片描述
這裏大家需要注意的是不要隨便用(2,)這種結構,這個在後面計算會造成很大的干擾。

2.ndarray數組的類型變換

在這裏插入圖片描述
#在NumPy這個包中可以用相同的別名來表徵與python精度相同的python數據類型。

ndarray數組向列表的轉換

在這裏插入圖片描述

數組的索引和切片

數組對象在索引和切片形成的其實是原數組的視圖,並沒有生成新的數組。

一維數組的索引和切片

在這裏插入圖片描述

2.多維數組的索引

在這裏插入圖片描述

數組的切片

在這裏插入圖片描述
大家看一下下一個圖片,這也是是我爲啥說切片形成的是視圖的原因。如果我們確實有需要的話用copy()方式。
在這裏插入圖片描述
在這裏插入圖片描述
一般的索引講完了,我們來看看兩個不同的索引。

布爾索引

其實也就是運用了布爾值,然後兩個數組而已,只不過聯繫起來用的。但在使用這個的時候要注意,在索引數組是可以傳入布爾值數組,但布爾值數組必須和數組軸索引長度一致,你甚至可以用切片或者整數值對布爾值數組進行混合和匹配。
在這裏插入圖片描述
在這裏插入圖片描述

神奇索引

其實就是爲了選出一個符合順序的子集,你可以簡單地通過傳遞一個包含指明所需順序的列表或者數組來完成。
在這裏插入圖片描述
在這裏插入圖片描述

ndarray的基本運算

ndarray其實就是把每一個ndarrya對象當做一個數值,來做簡單的標量運算。
在這裏插入圖片描述
最後我們就來簡單談一些簡單的計算函數
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這裏我列舉了一下一元函數,有的可能沒有用,大家可以到網上查一下其他的函數。大家也可以看一下二元函數。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
最後numpy基礎內容也就是這些了,有興趣的可以深入瞭解一下,下一篇博客我會講一下numpy中運用隨機函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章