Numpy的基礎用法

1.用Numpy建立數組html

numpy.array(object)建立數組,與array.array(typecode[, initializer])不一樣,array.array()只能建立一維數組數組

numpy.arange(start, stop, step, dtype=None)建立一個從start開始,stop結束(不包含stop),以step爲步長的一維數組(step最好爲整數),dtype默認爲整數(int32)dom

numpy.linspace(start, stop, num=50, endpoint=Trueretstep=Falsedtype=Noneaxis=0)建立一個從start開始,stop結束(默認包含stop),默認50個元素的數組;num規定了數組元素的個數;當endpoint爲False時,數組不包含stop;輸出的數組元素默認爲floatide

上述函數建立的數組所有返回ndarray類型函數

import numpy as np

ndarray_1 = np.array([[1,2,3], [4,5,6], (7,8,9)])
print(ndarray_1)

ndarray_2 = np.arange(1, 9)
print(ndarray_2)

ndarray_3 = np.linspace(1, 9, 9)
print(ndarray_3)

 

2.ndarray對象的方法spa

1.ndarray.ndim:返回數組的維數prototype

2.ndarray.shape:返回數組的大小code

3.ndarray.reshape(shape):返回一個以shape爲格式的新數組orm

4.ndarray.size:返回數組元素的總個數htm

5.ndarray.dtype:返回數組元素的類型

6.ndarray.itemsize:返回數組元素的大小(以字節爲單位)

import numpy as np

x = np.linspace(1,18,18,dtype=int).reshape(2,3,3)
print(x.ndim)# 3
print(x.shape)#(2,3,3)
print(x.size)# 18
print(x.dtype)# int32
print(x.itemsize)# 4

 

3.numpy建立特殊數組(數組的元素類型默認爲float)

numpy.empty(shape, dtype=float, order=‘C’)建立一個隨機數組

numpy.empty_like(prototypedtype = Noneorder ='K'subok = Trueshape = None)返回一個形狀和類型與給定數組相同的新數組

shape控制數組的形狀,爲int或int元組,例如:shape是3,則建立一個1x3的數組,shape是(2,3),則建立一個2x3的數組

 order:控制存儲時以行爲主仍是以列爲主

import numpy as np

arr = np.empty((2,3))
print(arr)

a = np.arange(6).reshape(2,3)
arr_like = np.empty_like(a)
print(arr_like)

 

numpy.zeros(shape, dtype=float, order='C'):建立一個全零數組

numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None):建立一個和給定的數組a形狀和類型相同的全零新數組

import numpy as np

arr_zero = np.zeros((2,3), dtype=int)
print(arr_zero)

a = np.arange(6, dtype=float).reshape(2,3)
arr_zero_like = np.zeros_like(a)
print(arr_zero_like)

 

numpy.ones(shape, dtype=None, order='C')建立一個全1數組

numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)建立一個和給定的數組a形狀和類型相同的全1數組

import numpy as np

arr_ones = np.ones((3,3), dtype=int)
print(arr_ones)

a = np.arange(9, dtype=float).reshape(3,3)
arr_ones_like = np.ones_like(a)
print(arr_ones_like)

 

numpy.full(shape, fill_value, dtype=None, order='C')建立一個用fill_value填充的填充數組

numpy.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None)建立一個和給定數組a形狀和類型相同的填充數組

import numpy as np

arr_full = np.full((2,3), 3)
print(arr_full)

a = np.arange(6)
arr_full_like = np.full_like(a, 1)
print(arr_full_like)

 

numpy.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')建立一個對角線元素爲1,其他元素爲0的數組

M:默認等於N,就是建立一個NxN的數組

kk爲正數,則對角線上移k位;k爲負數,則對角線下移k位;若|k|>=M,則數組元素全爲0

numpy.identity(n, dtype=None)建立一個nxn的,對角線元素爲1的數組,元素類型默認爲float

import numpy as np

arr_eye = np.eye(3)
print(arr_eye)

arr_eye2 = np.eye(3, k=1)
print(arr_eye2)

arr_eye3 = np.eye(3, k=3)
print(arr_eye3)

arr_id = np.identity(3)
print(arr_id)

 

4.數組的索引

4.1 一維數組的索引

一維數組的索引與列表的索引相似

import numpy as np

a = np.arange(10)
print(a[-1])# 9
print(a[5:])#[5 6 7 8 9]
print(a[-5:10])#[5 6 7 8 9]
# 第一個參數小於第二個時,最後一個參數要爲負數,表示從後向前索引
print(a[-2:2:-1])#[8 7 6 5 4 3]
# 翻轉
print(a[::-1])#[9 8 7 6 5 4 3 2 1 0]
print(a[5::2])#[5 7 9]
# 整數索引,索引數組中的第2個,倒數第4個,第5個元素
print(a[[2,-4,5]])#[2 6 5]

# 下標索引方式和原數組佔用一樣的存儲空間,修改b時,a也會被修改
b = a[1:3]
b[0] = 100
print(a)#[0,100,2,3,4,5,6,7,8,9]
# 列表索引和原數組不佔用一樣的存儲空間,修改c時,a2不會被修改
a2 = np.arange(10)
c = a2[[0,1,2]]
c[0] = 100
print(a2)#[0,1,2,3,4,5,6,7,8,9]

 

4.2 二維數組的索引

import numpy as np

a = np.arange(24).reshape(4,6)
# 取第1、二行的第一個元素
print(a[0,0], a[1,0]) 
# 取第一行的全部元素,第一行和第一列的索引下標爲0,以此類推 
print(a[0])
# 取第一列的全部元素
print(a[:, 0])
# 取第一行到第三行的部分元素
print(a[0:3, :3])
# 翻轉
print(a[::-1, ::-1])

#a[i:j, i:j] 逗號前面的表示取行,逗號後面的表示取列

 

4.3 三維數組的索引

import numpy as np

a = np.arange(24).reshape(2,3,4)
# 能夠把數組a看作一個2層樓的房子,每層有3x4個房間,第一個索引值表示位於哪個樓層,後面的兩個索引與二維數組相似
print(a[0, :, :])
# 當後面都爲:時,能夠用一個...代替
print(a[0,...])
# 索引第一層的第一行,第一列的元素
print(a[0, 0, 0])
# 索引兩層的最後一列元素
print(a[:,:,-1])

 

5.Numpy.random模塊

numpy.random.rand(d0, d1, d2,..., dn)生成一個元素值爲0-1之間的隨機數組,數組的形狀由傳入的參數決定:當不傳入參數時,生成一個元素;傳入一個參數時,根據參數的大小生成一個一維數組;傳入兩個參數時,生成一個二維數組

numpy.random.randn(d0,d1,d2,...,dn)生成一個服從標準正態分佈的數或數組,數組的形狀由傳入的參數(d1,d2,...dn)決定

import numpy as np

arr1 = np.random.rand()
print(arr1, '\n')
arr2 = np.random.rand(6)
print(arr2, '\n')
arr3 = np.random.rand(2,3)
print(arr3, '\n')
arr4 = np.random.randn(2,3,4)
print(arr4)

 

numpy.random.randint(low, high=None, size=None, dtype='l')從小到大返回隨機整數,若是high=None,則整數的範圍是[0, low),不然爲[low, high);若size=None,則生成一個隨機整數,不然根據size來生成相對應的數組,下同 

import numpy as np

arr1 = np.random.randint(5)
print(arr1)
arr2 = np.random.randint(1, 10, (2,3))
print(arr2)
# 當size前面只有一個參數時,size參數要寫成size=(a,b)
arr3 = np.random.randint(10,size=(2,3))
print(arr3)

 

numpy.random.normal(loc=0.0, scale=1.0, size=None)生成一個服從正態分佈的數或數組,loc爲正態分佈的均值,scale爲正態分佈的標準差

numpy.random.uniform(low=0.0, high=1.0, size=None)生成一個服從均勻分佈的數或數組,生成的全部值都大於等於low,小於high

numpy.random.poisson(lam=1.0, size=None)生成一個服從lam=1.0的泊松分佈的數或數組

import numpy as np

arr1 = np.random.normal(0, 1, (2,3))# 服從標準正態分佈
print(arr1)
arr2 = np.random.uniform(3, 5, (2,3))
print(arr2)
arr3 = np.random.poisson(size=(2,3))
print(arr3)

 

numpy.random.choice(a, size=None, replace=True, p=None)從給定的一維數組a中生成一個隨機樣本,replace設定樣本是否更換;p設定a中每一個數被選中的機率,未給出則每一個數服從均勻分佈;

import numpy as np

a = np.arange(5)
arr1 = np.random.choice(a, (2,3))
print(arr1)
arr2 = np.random.choice(a, 5, p=[0.1,0.2,0,0.7,0])
print(arr2)

 

numpy.random.shuffle(a)隨機打亂一個數組,多維數組則僅沿第一個軸隨機排列,函數返回None,原數組被改變 

import numpy as np

a = np.arange(12)
np.random.shuffle(a)
print(a)

b = np.arange(12).reshape(3,4)
np.random.shuffle(b)
print(b)

 

 numpy.random.seed(seed=None)用於設定隨機數種子

 

6.統計函數

Numpy能夠用於求數組的和與平均值

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>)用於求數組元素的和,axis=0:求每列的和,axis=1:求每行的和

import numpy as np

data1 = np.sum(np.arange(10).reshape(2,5))
print(data1)

data2 = np.sum(np.arange(10).reshape(2,5), axis=0)
print(data2)

data3 = np.sum(np.arange(10).reshape(2,5), axis=1)
print(data3)

data = np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32)#手冊的例子,不懂結果爲何爲1
print(data)

 

numpy.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)用於求均值

import numpy as np

data1 = np.mean(np.arange(10).reshape(2,5))
print(data1)

data2 = np.mean(np.arange(10).reshape(2,5), axis=0)
print(data2)

data3 = np.mean(np.arange(10).reshape(2,5), axis=1)
print(data3)

 

numpy.average(a, axis=None, weights=None, returned=Flase)用於求加權平均值,weights是用於加權的數組

import numpy as np

data = np.average([5,10],weights=[1,2])#至關於(1*5+2*10)/(1+2)
print(data)

 numpy.var(a,axis=None):用於求方差

numpy.std(a, axis=None):用於求標準差;

numpy.max(a, axis=None):用於求最大值

numpy.min(a,axis=None):用於求最小值

 

7.矩陣運算(用matlab更好一點)

Numpy用於矩陣運算的模塊是numpy.linalg

numpy.transpose(a, axes=None)用於矩陣轉置,或者能夠直接用 ndarray.T

numpy.dot(a, b)一維時計算向量內積;二維時計算矩陣乘法,或者 ndarray.dot(b)

numpy.trace(a,offset=0)用於計算矩陣的對角線元素之和

linalg.det(a):用於計算行列式

linalg.eig(a):用於計算方陣的特徵值和特徵向量

linalg.inv(a):用於求逆矩陣

linalg.solve(a, b):解線性方程組Ax=b

linalg.qr(a,mode='reduced'):用於矩陣的QR分解

linalg.svd(a,full_matrices=1,compute_uv=1):用於矩陣的奇異值分解

 

 更多用法請參考Numpy手冊

相關文章
相關標籤/搜索