目錄
- 一、簡介
- 二、ndarray -多元數組對象
- 1、為什麼要是用ndarray?
- 2、建立ndarray對象
- 3、ndarray多元數組建立
- 4、常用屬性
- 5、資料類型
- 6、ndarray 數組建立
- 7、數組運算和轉換
- 數組和标量(數字)之間運算
- 一維數組與多元數組之間的轉換
- 8、索引和切片
- 索引取值
- 切片
- 布爾型索引
- 三、通用函數
- 1、一進制函數
- 2、二進制函數
- 3、數學統計方法
- 4、随機數
一、簡介

Numpy是高性能科學計算和資料分析的基礎包。它也是pandas等其他資料分析的工具的基礎,基本所有資料分析的包都用過它。NumPy為Python帶來了真正的多元數組功能,并且提供了豐富的函數庫處理這些數組。它将常用的數學函數都支援向量化運算,使得這些數學函數能夠直接對數組進行操作,将本來需要在Python級别進行的循環,放到C語言的運算中,明顯地提高了程式的運算速度。
安裝方法:
pip install numpy
在jupyter中:需要加!,!pip3 install numpy
引用方式:
import numpy as np
這是官方認證的導入方式,可能會有人說為什麼不用
from numpy import *
,是因為在numpy當中有一些方法與Python中自帶的一些方法,例如
max
、
min
等沖突,為了避免這些麻煩大家就約定俗成的都使用這種方法。
二、ndarray -多元數組對象
Numpy的核心特征就是N-維數組對——ndarray.
1、為什麼要是用ndarray?
接下來我們可以通過具體的執行個體來展示一下ndarray的優勢。
現在有這樣一個需求:
已知若幹家跨國公司的市值(美元),将其換算為人民币
按照Python當中的方法
第一種:是将所有的美元通過for循環依次疊代出來,然後用每個公司的市值乘以匯率
第二種:通過map方法和lambda函數映射
這些方法相對來說也挺好用的,但是再來看通過ndarray對象是如何計算的
通過ndarray這個多元數組對象可以讓這些批量計算變得更加簡單,當然這隻它其中一種優勢,接下來就通過具體的操作來發現。
2、建立ndarray對象
import numpy as np
np.array()
3、ndarray多元數組建立
接下來就多元數組舉個例子:
有的人可能會說了,這個數組跟Python中的清單很像啊,它和清單有什麼差別呢?
- 數組對象内的元素類型必須相同
- 數組大小不可修改
4、常用屬性
屬性 | 描述 |
---|---|
T | 數組的轉置(對高維數組而言) |
dtype | 數組元素的資料類型 |
size | 數組元素的個數 |
ndim | 數組的維數 |
shape | 數組的次元大小(以元組形式) |
T:轉置
就相當于是将行變成列,列變成行,它也是一個比較常用的方法
5、資料類型
- dtype
類型 | 描述 |
---|---|
布爾型 | bool_ |
整型 | int_ int8 int16 int32 int 64 |
無符号整型 | uint8 uint16 uint32 uint64 |
浮點型 | float_ float16 float32 float64 |
複數型 | complex_ complex64 complex128 |
整型:
int32隻能表示(-2**31,2**31-1),因為它隻有32個位,隻能表示2**32個數
無符号整型:
隻能用來存正數,不能用來存負數
補充:
astype()方法可以修改數組的資料類型
6、ndarray 數組建立
方法 | 描述 |
---|---|
array() | 将清單轉換為數組,可選擇顯式指定dtype |
arange() | range的numpy版,支援浮點數 |
linspace() | 類似arange(),第三個參數為數組長度 |
zeros() | 根據指定形狀和dtype建立全0數組 |
ones() | 根據指定形狀和dtype建立全1數組 |
empty() | 根據指定形狀和dtype建立空數組(随機值) |
eye() | 根據指定邊長和dtype建立機關矩陣 |
# 1、arange()使用:
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0., 1., 2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5])
-----------------------------------------------------------------
# 2、linspace()的使用
#解釋:在1-10之間等比生成5個數,預設顧頭顧尾。endpoint=False顧頭不顧尾
# 每個數字之間的距離相等的,前後兩個數做減法肯定相等
np.linspace(1,10,5)
執行結果:
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
np.linspace(1,10,5,endpoint=False)
執行結果:
array([1. , 2.8, 4.6, 6.4, 8.2])
----------------------------------------------------------------
# 3、zeros() # 建立全0數組占位
>>> np.zeros(5)
array([ 0., 0., 0., 0., 0.])
>>> np.zeros((5,), dtype=int)
array([0, 0, 0, 0, 0])
>>> np.zeros((2, 1))
array([[ 0.],
[ 0.]])
>>> s = (2,2)
>>> np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]])
---------------------------------------------------------------------
# 4、ones() # 廚房間全為1的數組占位
>>> np.ones(5)
array([1., 1., 1., 1., 1.])
>>> np.ones((5,), dtype=int)
array([1, 1, 1, 1, 1])
>>> np.ones((2, 1))
array([[1.],
[1.]])
>>> s = (2,2)
>>> np.ones(s)
array([[1., 1.],
[1., 1.]])
------------------------------------------------------------------------
# 5、empty()
np.empty(10)
執行結果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 這個方法隻申請記憶體,不給它指派
-----------------------------------------------------------------------
# 6、eye() # 生成對稱矩陣 k控制向右偏移量
np.eye(5)
執行結果:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(5,k=2)
array([[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
7、數組運算和轉換
數組和标量(數字)之間運算
arr = np.array([1,2,3,4,5,6])
arr*2
# 執行結果:
array([ 2, 4, 6, 8, 10, 12])
-----------------------------------------------------------------------
arr = np.array([1,2,3,4,5,6])
arr1 = np.array([11,22,33,44,55,66])
arr*arr1
# 執行結果:
array([ 11, 44, 99, 176, 275, 396])
arr+arr1
# 執行結果:
array([12, 24, 36, 48, 60, 72])
一維數組與多元數組之間的轉換
# 一維數組-->多元數組
res1 = np.arange(30).reshape(5,-1) # -1無任何作用,占位。系統自動算出幾列
res1
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
# 多元數組-->一維數組
res2 = res1.reshape(30)
res2
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
8、索引和切片
索引取值
# 多元數組索引使用方法
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
現在有這樣一組資料,需求:找到20
清單寫法:arr[3][2]
數組寫法:arr[3,2] # 中間通過逗号隔開就可以了
# 一維數組索引使用
array([1, 2, 3, 4, 5, 6])
arr[0] # 1
arr[2] # 3
# 花式索引,清單裡放索引。需要提前知道索引
array([1, 2, 3, 4, 5, 6])
arr[[0,3]] # array([1, 4])
切片
# 一維數組切片:和python一至
array([1, 2, 3, 4, 5, 6])
arr[0:2] # array([1, 2]
arr[::-1] # array([6, 5, 4, 3, 2, 1])
arr[::2] # array([1, 3, 5])
# 多元數組切片:arr[行:列]
arr數組
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
arr[1:4,1:4] # 切片方式
執行結果:
array([[ 7, 8, 9],
[13, 14, 15],
[19, 20, 21]])
布爾型索引
現在有這樣一個需求:給一個數組,選出數組種所有大于5的數。
array([1, 2, 3, 4, 5, 6])
arr > 4
array([False, False, False, True, True, True])
取值:
arr[arr>3]
array([4, 5, 6])
三、通用函數
能對數組中所有元素同時進行運算的函數就是通用函數
常見通用函數:
能夠接受一個數組的叫做一進制函數,接受兩個數組的叫二進制函數,結果傳回的也是一個數組
1、一進制函數
函數 | 功能 |
---|---|
abs、fabs | 分别是計算整數和浮點數的絕對值 |
sqrt | 計算各元素的平方根 |
square | 計算各元素的平方 |
exp | 計算各元素的指數e**x |
log | 計算自然對數 |
sign | 計算各元素的正負号 |
ceil | 計算各元素的ceiling值 |
floor | 計算各元素floor值,即小于等于該值的最大整數 |
rint | 計算各元素的值四舍五入到最接近的整數,保留dtype |
modf | 将數組的小數部分和整數部分以兩個獨立數組的形式傳回,與Python的divmod方法類似 |
isnan | 計算各元素的正負号 |
isinf | 表示那些元素是無窮的布爾型數組 |
cos,sin,tan | 普通型和雙曲型三角函數 |
2、二進制函數
函數 | 功能 |
---|---|
add | 将數組中對應的元素相加 |
subtract | 從第一個數組中減去第二個數組中的元素 |
multiply | 數組元素相乘 |
divide、floor_divide | 除法或向下圓整除法(舍棄餘數) |
power | 對第一個數組中的元素A,根據第二個數組中的相應元素B計算A**B |
maximum,fmax | 計算最大值,fmax忽略NAN |
miximum,fmix | 計算最小值,fmin忽略NAN |
mod | 元素的求模計算(除法的餘數) |
補充内容:浮點數特殊值
浮點數:float
浮點數有兩個特殊值:
1、nan(Not a Number):不等于任何浮點數(nan != nan)
---------------------------------------------
2、inf(infinity):比任何浮點數都大
---------------------------------------------
- Numpy中建立特殊值:np.nan、np.inf
- 資料分析中,nan常被用作表示資料缺失值
3、數學統計方法
函數 | 功能 |
---|---|
sum | 求和 |
cumsum | 求字首和 |
mean | 求平均數 |
std | 求标準差 |
var | 求方差 |
min | 求最小值 |
max | 求最大值 |
argmin | 求最小值索引 |
argmax | 求最大值索引 |
4、随機數
随機數生成函數在np.random的子包當中
常用函數
函數 | 功能 |
---|---|
np.random.rand | 給定形狀産生随機數組(0到1之間的數) |
np.random.randint | 給定形狀産生随機整數 |
np.random.chocie | 給定形狀産生随機選擇 |
np.random.shuffle | 與random.shuffle相同 |
np.random.uniform | 給定形狀産生随機數組 |