Numpy庫基礎
Numpy介紹
Numpy是一個開源的python科學計算基礎庫。
*一個強大的數組對象ndarray
*廣播功能函數
*整合c/c++/Fortran代碼的工具
*線性代數,傅裡葉變換,随機數生成等功能
Numpy是Scipy,pandas等資料處理或科學計算庫的基礎
基本概念
一.資料的次元
1.一維資料
[1,2,3]
2.二維資料(表格是典型的二維資料)
[[1,2,3],[1,2,3]]
3.多元資料
4.高維資料(這裡的高維資料是利用二進制關系表表達複雜的多元資料)
一.Numpy庫的數組對象ndarray 引用numpy的方法
問題一:為什麼python有了清單,而且可以表達多元資料,我們還要數組類型呢?
import numpy as np
ndarray是一個數組類型的資料。
數組對象可以去掉元素運算所需要的循環,使一維向量更像單個資料
我們舉個例子如下:
import numpy as np
#未使用numpy的情況,計算A的平方+B的平方
def pysum():
a = [0,1,2,3,4]
b = [9,8,7,6,5]
c= []
for i in range(len(a)):
c.append(a[i]**2 + b[i]**2)
return c
print(pysum())
#使用numpy計算A的平方+B的平方
a = np.array([0,1,2,3,4])
b = np.array([9,8,7,6,5])
print(a**2 + b**2)
設定專門的數組對象,經過優化,可以提升這類應用的運算速度。(numpy的實作,底層使用C語言,甚至更底層的方法支援運算)
數組對象采用相同的資料類型,有助于節省運算和存儲空間。(科學計算中一個次元的所有資料往往相同)
ndarray是一個多元數組對象,由兩部分組成:
實際的資料
描述這些資料的中繼資料(資料的次元,資料類型等)
ndarray的兩個基本概念
axis(軸):儲存資料的次元
rank(秩):軸的數量
生成一個ndarray數組
屬性 | 說明 |
---|---|
.ndim | 秩,即軸的數量或者次元的數量 |
.shape | ndarray對象的尺度,對于矩陣,n行m列 |
.size | ndarray對象元素的個數,相當于.shape中的n*m的值 |
.dtype | ndarray對象的元素類型 |
.itemsize | ndarray對象中每個元素的大小,以位元組為機關 |
tip:shape[1] 表示第一維資料中分了多少層
建立ndarray數組
x = np.array(list/tuple)
x = np.array(list/tuple,dtype = np.float32)
函數 | 說明 |
np.arange(n) | 類似range()函數,傳回ndarray類型,元素從0到n-1 |
np.ones(shape) | 根據shape生成一個全1數組,shape是元組類型 |
np.zeros(shape) | 根據shape生成一個全0數組,shape是元組類型 |
np.full(shape,val) | 根據shape生成一個數組,每個元素都是val |
np.eye(n) | 船艦一個正方的n*n機關矩陣,對角線為1,其餘為0 |
二 .數組的操作
引索和切片
一維數組的引索和切片
import numpy as np
a = np.array([9,8,7,6,5])
print(a[2]) #結果為7
print(a[1:4:2])#1表示開始,,位置4表示結束,位置2表示步長
#結果為[8,6]
多元數組的索引和切片
import numpy as np
a = np.arange(24).reshape((2,3,4))#注意reshape的參數要是清單或者元組
#結果輸出如下:
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]]])
a[1,2,3]#1表示第一個次元,2表示第二個次元,3表示第三個次元
23
a[0,1,2]
6
a[-1,-2,-3]
17
多元數組的引索和切片
import numpy as np
a = np.arange(24).reshape((2,3,4))
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]]])
a[:,1:3,:]#表示不管第一次元和第三次元,選取第二次元從下标1到3的元素
[[[4,5,6,7]
[8,9,10,11]],
[[16,17,18,19]
[20,21,22,23]]]
a[:,:,::2]#表示不管第一和第二次元,也不管第三個次元,但是以2為步長來選取元素
[[[0,2]
[4,6]
[8,10]],
[[12,14]
[16,18]
[20,22]]]
csv檔案的存取
#一維資料
np.savetxt("qq.csv",array,fmt,delimiter)#fmt格式,delimiter分割字元串
np.savetxt('a.csv',a,fmt = '%d',delimiter = ',')
np.load('a.csv',delimiter = ',')
#多元資料
np.save('a.csv',a)#存
np.laod('a.csv')#讀
随機函數
np.random.rand()
np.random.randn()
np.random.randint()
np.random.seed(s)
統計函數
np.sum(a)
np.mean(a,axis = 1)
np.average(a,axis = 0,weights = [10,5,1])
np.std(a)
np.var(a)
梯度函數
c = np.random.randint(0,50,(3,5))
np.gradient(c)
#後一個元素減去上一個元素然後除以間隔數
#邊上元素用本身減去上個元素除1