附上參考鏈接
https://www.runoob.com/numpy/numpy-tutorial.html
https://www.cnblogs.com/TensorSense/p/6795995.html
https://docs.scipy.org/doc/numpy/
大數(shù)據(jù)挖掘常用的Python包
Numpy:科學計算包
Scipy:科學計算包
Pandas:數(shù)據(jù)分析處理包
Matplotlib:數(shù)據(jù)可視化庫
Scikit-learn:機器學習庫
這里只介紹numpy包
一、Numpy簡介
NumPy是一個開源的Python科學計算基礎庫,提供了大量的數(shù)值編程工具,可以方便地處理向量、矩陣等運算。它包含:
- 一個強大的N維數(shù)組對象 ndarray
- 廣播功能函數(shù)
- 線性代數(shù)、傅里葉變換、隨機數(shù)生成等功能
NumPy是SciPy、Pandas等數(shù)據(jù)處理或科學計算庫的基礎
二、Numpy的基本操作
0. 導入Numpy
import numpy as np
1. 創(chuàng)建數(shù)組
- (1)從Python中的列表、元組等類型創(chuàng)建nd-array數(shù)組
利用
① 從列表創(chuàng)建數(shù)組
import numpy as np
li = [1,5,6,8]
x = np.array(li)
print(x)
print(type(x))
結果:
[1 5 6 8]
<class 'numpy.ndarray'>
② 從元組創(chuàng)建數(shù)組
import numpy as np
tup = (5,4,8,6)
x = np.array(tup)
print(x)
print(type(x))
結果:
[5 4 8 6]
<class 'numpy.ndarray'>
③ 從列表和元組混合創(chuàng)建數(shù)組
import numpy as np
li = [1,5,6,8]
tup = (5,4,8,6)
x = np.array([li,tup]) #實際上這里依舊是列表創(chuàng)建數(shù)組
print(x)
print(type(x))
結果:
[[1 5 6 8]
[5 4 8 6]]
<class 'numpy.ndarray'>
-
(2)使用Numpy函數(shù)創(chuàng)建數(shù)組

import numpy as np
x1 = np.arange(10)
x2 = np.arange(5)
x3 = np.arange(1,11,2)
print(x1)
print(x2)
print(x3)
結果:
[0 1 2 3 4 5 6 7 8 9]
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]
arange()有三個主要參數(shù),start,stop,step,即起始、終止和步長。
② ones(shape)
參數(shù)shape指的是列表或者元組,數(shù)字個數(shù)指數(shù)組的維度,可以通過shape屬性查看數(shù)組的形狀。參數(shù)dtype是元素的類型有int,默認為float。
import numpy as np
x1 = np.ones(3) #一維數(shù)組
x2 = np.ones((2,3)) #二維數(shù)組
x3 = np.ones([2,3,4]) #三維數(shù)組
print(x1)
print()
print(x2)
print()
print(x3)
print(x1.shape)
print(x2.shape)
print(x3.shape)
結果:
[1. 1. 1.]
[[1. 1. 1.]
[1. 1. 1.]]
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
(3,)
(2, 3)
(2, 3, 4)
③ zeros(shape)
zeros與ones相似,只不過生成的元素是0.
import numpy as np
x1 = np.zeros(3) #一維數(shù)組
x2 = np.zeros((2,3)) #二維數(shù)組
x3 = np.zeros([2,3,4]) #三維數(shù)組
print(x1)
print()
print(x2)
print()
print(x3)
結果:
[0. 0. 0.]
[[0. 0. 0.]
[0. 0. 0.]]
[[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]]
④ full(shape,val)
用val填充一個shape形狀的數(shù)組
import numpy as np
x = np.full((2,3),2) #用2填充2*3的二維數(shù)組
print(x)
結果:
[[2 2 2]
[2 2 2]]
⑤ eye(n)
生成一個n*n維的單位矩陣
import numpy as np
x = np.eye(3)
print(x)
結果:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
-
(3)利用其它函數(shù)創(chuàng)建nd-array數(shù)組
① linspace(start,stop,num,endpoint)
import numpy as np
x1 = np.linspace(1,10,3,dtype=int) # endpoint默認為True
print(x1)
x2 = np.linspace(1,10,3,dtype=int,endpoint=False)
print(x2)
結果:
[1 5 10]
[1 4 7]
② concatenate((a1,a2,...,an),aixs=0)
(a1,a2,...)是要連接的序列,aixs是行或者列,0是按列連接、1是按行連接,默認為0。
將兩個或多個數(shù)組合并成一個數(shù)組
import numpy as np
a = np.array([[4,1],[3,2]])
b = np.array([[5,2],[8,9]])
c1 = np.concatenate([a,b])
c2 = np.concatenate((a,b),1)
print(a)
print()
print(b)
print()
print(c1)
print()
print(c2)
結果:
[[4 1]
[3 2]]
[[5 2]
[8 9]]
[[4 1]
[3 2]
[5 2]
[8 9]]
[[4 1 5 2]
[3 2 8 9]]
③ hstack(tup)和vstack(tup)
tup是元組
import numpy as np
a = np.array([[5,4],[8,6],[8,7]])
b = np.array([[1,2],[4,5],[2,2]])
c1 = np.hstack((a,b))
c2 = np.vstack((a,b))
print(a)
print()
print(b)
print()
print(c1)
print()
print(c2)
結果:
[[5 4]
[8 6]
[8 7]]
[[1 2]
[4 5]
[2 2]]
[[5 4 1 2]
[8 6 4 5]
[8 7 2 2]]
[[5 4]
[8 6]
[8 7]
[1 2]
[4 5]
[2 2]]
2. 獲取數(shù)組屬性

import numpy as np
a = np.array([[2,1,3],[1,4,5],[8,5,5]])
print(a)
print("a.ndim:",a.ndim)
print("a.shape:",a.shape)
print("a.size:",a.size)
print('a.dtype:',a.dtype)
print('itemsize:',a.itemsize)
結果:
[[2 1 3]
[1 4 5]
[8 5 5]]
a.ndim: 2
a.shape: (3, 3)
a.size: 9
a.dtype: int32
itemsize: 4
3. 隨機生成、復制、排序、調整、轉置數(shù)組

有np.random.rand(),np.random.randn()兩種方式,區(qū)別在于rand()只生成正數(shù)。
import numpy as np
x1 = np.random.randn(2,3) #生成一個2x3的二維數(shù)組
x2 = np.random.randn(3,4) #生成一個3x4的二維數(shù)組
x3 = np.random.randn(2,2,3) #生成一個2x2x3的三維數(shù)組
print(x1)
print()
print(x2)
print()
print(x3)
結果:
[[ 0.6919357 0.39917593 -0.0896835 ]
[ 0.61647791 0.85612186 -0.93986079]]
[[-0.1696892 -1.66241796 -1.24078019 1.02316869]
[ 1.05928049 -0.42552907 0.40492102 -0.78794536]
[ 0.78318229 0.75858729 -0.44156901 -1.58432534]]
[[[ 0.85747856 1.61558974 -0.46686676]
[ 1.22798477 1.26865842 -0.18074301]]
[[-1.99597649 0.40527899 1.86830874]
[-0.5422555 0.83269358 -0.33257266]]]
② 復制數(shù)組
np.copy(arr)
import numpy as np
a = np.array([[1,2,4],[2,5,6]])
a_copy = np.copy(a)
print(a)
print()
print('復制',a_copy)
結果:
[[1 2 4]
[2 5 6]]
復制 [[1 2 4]
[2 5 6]]
③ 排序數(shù)組
np.sort(a,axis=1)
axis=0 按列排序,axis=1按行排序
import numpy as np
a = np.array([[1,5,3],[8,7,2]])
b = np.sort(a)
c = np.sort(a,axis=0)
print(a)
print()
print(b)
print()
print(c)
結果:
[[1 5 3]
[8 7 2]]
[[1 3 5]
[2 7 8]]
[[1 5 2]
[8 7 3]]
④ 調整數(shù)組
reshape(arr,newshape),調整數(shù)組的形狀
import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
b = np.reshape(a,(3,2)) #調整為3x2的數(shù)組,但不能調整為2x4,4x2這樣子的
print(a)
print()
print(b)
resize(a,newshape),調整數(shù)組的大小,可以調整為更大的數(shù)組,如果新數(shù)組大小大于原始大小,則包含原始數(shù)組中的元素的副本。
import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
b = np.resize(a,(3,4)) #調整為一個3x4的二維數(shù)組
print(a)
print()
print(b)
結果:
[[1 5 3]
[8 7 2]]
[[1 5 3 8]
[7 2 1 5]
[3 8 7 2]]
⑤ 轉置數(shù)組
arr.T
import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
aT = a.T
print(a)
print()
print(aT)
結果:
[[1 5 3]
[8 7 2]]
[[1 8]
[5 7]
[3 2]]
4. 增加、刪除元素

① 添加元素
1)從結尾增加元素,append(arr,values)
import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加元素之前:")
print(a)
a = np.append(a,10)
print("添加元素之后,變成了一維數(shù)組:")
print(a)
結果:
添加元素之前:
[[1 5 3]
[8 7 2]]
添加元素之后,變成了一維數(shù)組:
[ 1 5 3 8 7 2 10]
沿0軸添加元素
import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加之前")
print(a)
a = np.append(a,[[2,5,6]],axis=0)
print("沿0軸添加元素")
print(a)
結果:
添加之前
[[1 5 3]
[8 7 2]]
沿0軸添加元素
[[1 5 3]
[8 7 2]
[2 5 6]]
沿1軸添加元素
import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加之前")
print(a)
#a = np.append(a,[[2,5,6]],axis=1)按1軸,必須兩個維度都要增加
a = np.append(a,[[2,5,6],[1,5,5]],axis=1)
print("沿1軸添加元素")
print(a)
結果:
添加之前
[[1 5 3]
[8 7 2]]
沿1軸添加元素
[[1 5 3 2 5 6]
[8 7 2 1 5 5]]
2)從指定位置增加元素,insert(arr,index,values)
普通插入
import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
a = np.insert(a,2,[1,5,7])
print("在索引為2的元素之前插入,變?yōu)橐痪S數(shù)組:")
print(a)
結果:
添加之前
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
在索引為2的元素之前插入,變?yōu)橐痪S數(shù)組:
[ 0 1 1 5 7 2 3 4 5 6 7 8 9 10 11]
按行(0軸)索引插入
import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
a = np.insert(a,2,[1,5,7],0)
print("按行索引插入,在行索引為2的行之前插入:")
print(a)
結果:
添加之前
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
按行索引插入,在行索引為2的行之前插入:
[[ 0 1 2]
[ 3 4 5]
[ 1 5 7]
[ 6 7 8]
[ 9 10 11]]
按列(1軸)索引插入
import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
#a = np.insert(a,2,[1,5,7],1) 注意,按列來的話,有四個元素
a = np.insert(a,2,[1,5,7,4],1)
print("按列索引插入,在列索引為2的列之前插入:")
print(a)
結果:
添加之前
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
按列索引插入,在列索引為2的列之前插入:
[[ 0 1 1 2]
[ 3 4 5 5]
[ 6 7 7 8]
[ 9 10 4 11]]
② 刪除元素
普通刪除,返回一維數(shù)組
import numpy as np
a = np.arange(10).reshape(5,2)
print("刪除之前:")
print(a)
a = np.delete(a,2)
print("刪除之后:")
print(a)
結果:
刪除之前:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
刪除之后:
[0 1 3 4 5 6 7 8 9]
np.delete(arr,index,axis=0):刪除數(shù)組arr第index+1行所有的元素,返回ndarray對象
import numpy as np
a = np.arange(10).reshape(5,2)
print("刪除之前:")
print(a)
a = np.delete(a,2,axis=0)
print("刪除之后:")
print(a)
結果:
刪除之前:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
刪除之后:
[[0 1]
[2 3]
[6 7]
[8 9]]
np.delete(arr,index,axis=1):刪除數(shù)組arr第index+1列所有的元素,返回ndarray對象
import numpy as np
a = np.arange(10).reshape(2,5)
print("刪除之前:")
print(a)
a = np.delete(a,2,axis=1)
print("刪除之后:")
print(a)
結果:
刪除之前:
[[0 1 2 3 4]
[5 6 7 8 9]]
刪除之后:
[[0 1 3 4]
[5 6 8 9]]
5. 數(shù)組的索引、切片、子集
① 索引:獲取數(shù)組中特定位置元素的過程
一維數(shù)組的索引,與序列相似
import numpy as np
a = np.array([4,2,6,1,7])
print(a)
print("查找索引為3的元素:")
print(a[3])
結果:
[4 2 6 1 7]
查找索引為3的元素:
1
多維數(shù)組的索引每個維度一個索引值,逗號分割
import numpy as np
a = np.arange(24).reshape(2,3,4) #生成一個2x3x4的三維數(shù)組
print(a)
print("查找第一維度索引為1的數(shù)組")
print("a[1]:")
print(a[1])
print("查找第一維度索引為1、第二維度索引為2的數(shù)組")
print("a[1,2]:")
print(a[1,2])
print("查找第一維度索引為1、第二維度索引為2、第三維度索引為3的元素:")
print("a[1,2,3]:")
print(a[1,2,3])
結果:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
查找第一維度索引為1的數(shù)組
a[1]:
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
查找第一維度索引為1、第二維度索引為2的數(shù)組
a[1,2]:
[20 21 22 23]
查找第一維度索引為1、第二維度索引為2、第三維度索引為3的元素:
a[1,2,3]:
23
② 切片:獲取數(shù)組元素子集的過程
一維數(shù)組的切片,與序列相似,有start、stop、step
import numpy as np
a = np.array([4,2,6,1,7,19,12])
print(a)
print("切出從索引0到索引4的元素:")
print("a[:5]:")
print(a[:5])
print("切出從索引1到索引5的元素:")
print("a[1:6]:")
print(a[1:6])
print("以間隔為2,切出元素:")
print("a[::2]:")
print(a[::2])
結果:
[ 4 2 6 1 7 19 12]
切出從索引0到索引4的元素:
a[:5]:
[4 2 6 1 7]
切出從索引1到索引5的元素:
a[1:6]:
[ 2 6 1 7 19]
以間隔為2,切出元素:
a[::2]:
[ 4 6 7 12]
多維數(shù)組的切片選取一個維度用: 每個維度切片方法與一維數(shù)組相同。
a[第一個維度,第二個維度,第三個維度]
import numpy as np
a = np.arange(24).reshape((2,3,4))
print(a)
print("第一維度不切片、第二維度切索引為1到2的、第三維度切0到3的片段")
print("操作:a[:,1:3,:4]")
print(a[:,1:3,:4])
print("第一維度不切片、第二維度切索引為1到2的、第三維度以步長為2切片")
print("操作:a[:,1:3,::2]")
print(a[:,1:3,::2])
print("第一維度得到最后一片、第二維度切索引為1到2的、第三維度以步長為2切片")
print("操作:a[1,1:3,::2]")
print(a[1,1:3,::2])
結果:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
第一維度不切片、第二維度切索引為1到2的、第三維度切0到3的片段
操作:a[:,1:3,:4]
[[[ 4 5 6 7]
[ 8 9 10 11]]
[[16 17 18 19]
[20 21 22 23]]]
第一維度不切片、第二維度切索引為1到2的、第三維度以步長為2切片
操作:a[:,1:3,::2]
[[[ 4 6]
[ 8 10]]
[[16 18]
[20 22]]]
第一維度得到最后一片、第二維度切索引為1到2的、第三維度以步長為2切片
操作:a[1,1:3,::2]
[[16 18]
[20 22]]
6. 標量運算

① add(arr,num)
import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("加法:")
print("np.add(a,2)")
print(np.add(a,2))
結果:
[[2 1]
[3 2]]
加法:
np.add(a,2)
[[4 3]
[5 4]]
② subtract(arr,num)
import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("減法:")
print("np.subtract(a,2)")
print(np.subtract(a,2))
結果:
[[2 1]
[3 2]]
減法:
np.subtract(a,2)
[[ 0 -1]
[ 1 0]]
③ multiply(arr,num)
import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("乘法:")
print("np.multiply(a,2)")
print(np.multiply(a,2))
結果:
[[2 1]
[3 2]]
乘法:
np.multiply(a,2)
[[4 2]
[6 4]]
④ divide(arr,num)
import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("除法:")
print("np.divide(a,2)")
print(np.divide(a,2))
結果:
[[2 1]
[3 2]]
除法:
np.divide(a,2)
[[1. 0.5]
[1.5 1. ]]
⑤ power(arr,num)
import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("冪運算:")
print("np.power(a,2)")
print(np.power(a,2))
結果:
[[2 1]
[3 2]]
冪運算:
np.power(a,2)
[[4 1]
[9 4]]
7. 向量運算


① np.add(arr1,arr2):兩個數(shù)組對應元素相加
import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.add(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.add(a,b),a,b兩個數(shù)組對應元素相加')
print(c)
結果:
這是a數(shù)組
[[1 2]
[5 6]]
這是b數(shù)組
[[6 5]
[2 1]]
np.add(a,b),a,b兩個數(shù)組對應元素相加
[[7 7]
[7 7]]
② np.subtract(arr1,arr2):兩個數(shù)組對應元素相減
import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.subtract(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.subtract(a,b),a,b兩個數(shù)組對應元素相減')
print(c)
結果:
這是a數(shù)組
[[1 2]
[5 6]]
這是b數(shù)組
[[6 5]
[2 1]]
np.subtract(a,b),a,b兩個數(shù)組對應元素相減
[[-5 -3]
[ 3 5]]
③ np.multiply(arr1,arr2):兩個數(shù)組對應元素相乘,而不是矩陣相乘的法則。
import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.multiply(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.multiply(a,b),a,b兩個數(shù)組對應元素相乘')
print(c)
結果:
這是a數(shù)組
[[1 2]
[5 6]]
這是b數(shù)組
[[6 5]
[2 1]]
np.multiply(a,b),a,b兩個數(shù)組對應元素相乘
[[ 6 10]
[10 6]]
④ np.divide(arr1,arr2):兩個數(shù)組對應元素相除
import numpy as np
a = np.array([12,10,1,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.divide(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.divide(a,b),a,b兩個數(shù)組對應元素相除')
print(c)
結果:
這是a數(shù)組
[[12 10]
[ 1 6]]
這是b數(shù)組
[[6 5]
[2 1]]
np.divide(a,b),a,b兩個數(shù)組對應元素相除
[[2. 2. ]
[0.5 6. ]]
⑤ np.power(arr1,arr2):將數(shù)組arr2中的元素作為數(shù)組arr1的對應元素的指數(shù)
import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,2]).reshape(2,2)
c = np.power(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.power(a,b),將b的元素作為a對應元素的指數(shù)')
print(c)
結果:
這是a數(shù)組
[[1 2]
[5 6]]
這是b數(shù)組
[[6 5]
[2 2]]
np.power(a,b),將b的元素作為a對應元素的指數(shù)
[[ 1 32]
[25 36]]
⑥ np.abs(x) np.fabs(x):計算數(shù)組各元素的絕對值
import numpy as np
a = np.array([-1,-2,5,6]).reshape(2,2)
b = np.array([-6,-5,2,1]).reshape(2,2)
c = np.abs(a)
d = np.fabs(b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.abs(a)')
print(c)
print('np.fabs(b),元素變?yōu)楦↑c型')
print(d)
結果:
這是a數(shù)組
[[-1 -2]
[ 5 6]]
這是b數(shù)組
[[-6 -5]
[ 2 1]]
np.abs(a)
[[1 2]
[5 6]]
np.fabs(b),元素變?yōu)楦↑c型
[[6. 5.]
[2. 1.]]
⑦ np.sqrt(x):計算數(shù)組各元素的平方根
import numpy as np
a = np.array([1,4,16,36]).reshape(2,2)
c = np.sqrt(a)
print('這是a數(shù)組')
print(a)
print('np.sqrt(a),計算數(shù)組a各元素的平方根')
print(c)
結果:
這是a數(shù)組
[[ 1 4]
[16 36]]
np.sqrt(a),計算數(shù)組a各元素的平方根
[[1. 2.]
[4. 6.]]
⑧ np.square(x):計算數(shù)組各元素的平方
import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
c = np.square(a)
print('這是a數(shù)組')
print(a)
print('np.square(a),計算數(shù)組a各元素的平方')
print(c)
結果:
這是a數(shù)組
[[1 2]
[5 6]]
np.square(a),計算數(shù)組a各元素的平方
[[ 1 4]
[25 36]]
⑨ np.log(x)、np.log10(x)、np.log2(x)
np.log(x):計算數(shù)組各元素的自然對數(shù)
import numpy as np
a = np.array([np.e,2,10,6]).reshape(2,2)
c = np.log(a)
print('這是a數(shù)組')
print(a)
print('np.log(a),計算數(shù)組a各元素的自然對數(shù)')
print(c)
結果:
這是a數(shù)組
[[ 2.71828183 2. ]
[10. 6. ]]
np.log(a),計算數(shù)組a各元素的自然對數(shù)
[[1. 0.69314718]
[2.30258509 1.79175947]]
np.log10(x):計算數(shù)組各元素的10底對數(shù)
import numpy as np
a = np.array([10,100,1000,2]).reshape(2,2)
c = np.log10(a)
print('這是a數(shù)組')
print(a)
print('np.log10(a),計算數(shù)組a各元素的10底對數(shù)')
print(c)
結果:
這是a數(shù)組
[[ 10 100]
[1000 2]]
np.log10(a),計算數(shù)組a各元素的10底對數(shù)
[[1. 2. ]
[3. 0.30103]]
np.log2(x):計算數(shù)組各元素的2底對數(shù)
import numpy as np
a = np.array([2,16,32,4]).reshape(2,2)
c = np.log2(a)
print('這是a數(shù)組')
print(a)
print('np.log2(a),計算數(shù)組a各元素的2底對數(shù)')
print(c)
結果:
這是a數(shù)組
[[ 2 16]
[32 4]]
np.log2(a),計算數(shù)組a各元素的2底對數(shù)
[[1. 4.]
[5. 2.]]
⑩ np.ceil(x)、np.floor(x)
np.ceil(x):數(shù)組各元素向上取整
import numpy as np
a = np.random.randn(2,2)
c = np.ceil(a)
print('這是a數(shù)組')
print(a)
print('np.ceil(a),數(shù)組a各元素向上取整')
print(c)
結果:
這是a數(shù)組
[[ 0.35828912 1.21284634]
[-0.78966178 0.01141592]]
np.ceil(a),數(shù)組a各元素向上取整
[[ 1. 2.]
[-0. 1.]]
np.floor(x):數(shù)組各元素向下取整
import numpy as np
a = np.random.randn(2,2)
c = np.floor(a)
print('這是a數(shù)組')
print(a)
print('np.floor(a),數(shù)組a各元素向下取整')
print(c)
結果:
這是a數(shù)組
[[-0.92498697 -0.24792889]
[-0.7291078 1.64891259]]
np.floor(a),數(shù)組a各元素向下取整
[[-1. -1.]
[-1. 1.]]
8. 統(tǒng)計函數(shù)

① mean(arr,axis):計算數(shù)組中的均值,axis是指定軸的均值,0是求每列的均值,1是求每行的均值
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的均值,np.mean(a)")
print(np.mean(a))
print("求a每列的均值,np.mean(a,axis=0)")
print(np.mean(a,axis=0))
print("求a每行的均值,np.mean(a,axis=1)")
print(np.mean(a,axis=1))
結果:
[[2 1]
[5 2]]
求a的均值,np.mean(a)
2.5
求a每列的均值,np.mean(a,axis=0)
[3.5 1.5]
求a每行的均值,np.mean(a,axis=1)
[1.5 3.5]
② var():返回數(shù)組arr中所有元素的方差
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的方差,np.var(a)")
a_var = np.var(a)
print(a_var)
結果:
[[2 1]
[5 2]]
求a的方差,np.var(a)
2.25
③ std():返回數(shù)組arr中所有元素的標準差
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的標準差,np.std(a)")
a_std = np.std(a)
print(a_std)
結果:
[[2 1]
[5 2]]
求a的方差,np.std(a)
1.5
④ corrcoef():返回數(shù)組arr中所有元素的相關系數(shù)
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的相關系數(shù),np.corrcoef(a)")
a_corrcoef = np.corrcoef(a)
print(a_corrcoef)
結果:
[[2 1]
[5 2]]
求a的相關系數(shù),np.corrcoef(a)
[[1. 1.]
[1. 1.]]
⑤ sum():返回數(shù)組arr所有元素之和
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的和,np.sum(a)")
a_sum = np.sum(a)
print(a_sum)
結果:
[[2 1]
[5 2]]
求a的和,np.sum(a)
10
⑥ min():返回數(shù)組arr中最小元素
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的最小元素,np.min(a)")
a_min = np.min(a)
print(a_min)
結果:
[[2 1]
[5 2]]
求a的最小元素,np.min(a)
1
⑦ max():返回數(shù)組arr中最大元素
import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的最大元素,np.max(a)")
a_max = np.max(a)
print(a_max)
結果:
[[2 1]
[5 2]]
求a的最大元素,np.max(a)
5
9. 矩陣的操作
科學計算中大量使用到矩陣運算,NumPy提供了矩陣對象。矩陣對象和數(shù)組對象主要有兩點差別:
矩陣是二維的,而數(shù)組可以是任意正整數(shù)維
矩陣的*操作符進行的是矩陣乘法,乘號左側的矩陣列和乘號右側的矩陣行大小要相等,而數(shù)組的*操作符是對應元素兩兩相乘,乘號兩側的數(shù)組每一維大小都需要一致。
① 矩陣的生成
1)np.asmatrix(arr)
import numpy as np
a = np.arange(15).reshape(3,5)
print('這是數(shù)組a')
print(a)
print('a的類型')
print(type(a))
m = np.asmatrix(a)
print('將數(shù)組a轉為矩陣m,np.asmatrix(a),得矩陣m')
print(m)
print('m的類型')
print(type(m))
結果:
這是數(shù)組a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
a的類型
<class 'numpy.ndarray'>
將數(shù)組a轉為矩陣m,np.asmatrix(a),得矩陣m
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
m的類型
<class 'numpy.matrix'>
2)np.matrix(arr)
import numpy as np
m = np.matrix('1,2,8;6,5,3;4,9,7')
#使用該函數(shù)時,內部需為字符串,每行用分號隔開
print("矩陣m")
print(m)
print("查看類型type(m)")
print(type(m))
結果:
矩陣m
[[1 2 8]
[6 5 3]
[4 9 7]]
查看類型type(m)
<class 'numpy.matrix'>
3)np.mat(arr)
import numpy as np
a = np.arange(2,45,3).reshape(5,3)
print('這是數(shù)組a')
print(a)
print('a的類型')
print(type(a))
m = np.mat(a)
print('將數(shù)組a轉為矩陣m,np.mat(a),得矩陣m')
print(m)
print('m的類型')
print(type(m))
結果:
這是數(shù)組a
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
a的類型
<class 'numpy.ndarray'>
將數(shù)組a轉為矩陣m,np.mat(a),得矩陣m
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
m的類型
<class 'numpy.matrix'>
② 矩陣的乘法
直接按照矩陣的乘法來計算,用*來進行矩陣相乘,左矩陣的列數(shù)要等于右矩陣的行數(shù)
import numpy as np
left_m = np.mat(np.arange(1,5).reshape(2,2))
right_m = np.mat(np.arange(1,8,2).reshape(2,2))
print('左矩陣left_m')
print(left_m)
print('右矩陣right_m')
print(right_m)
print('兩個矩陣相乘')
print(left_m * right_m)
結果:
左矩陣left_m
[[1 2]
[3 4]]
右矩陣right_m
[[1 3]
[5 7]]
兩個矩陣相乘
[[11 17]
[23 37]]
③ 矩陣的轉置
1)matrix.T
import numpy as np
m = np.mat(np.arange(9).reshape(3,3))
print("矩陣m")
print(m,'\n')
print("m的轉置T,矩陣矩陣m.T")
print(m.T)
結果:
矩陣m
[[0 1 2]
[3 4 5]
[6 7 8]]
m的轉置T,矩陣矩陣m.T
[[0 3 6]
[1 4 7]
[2 5 8]]
2)np.transope(matrix)
import numpy as np
m = np.mat(np.arange(9).reshape(3,3))
print("矩陣m")
print(m,'\n')
print("m的轉置T,矩陣矩陣np.transope(m)")
print(np.transpose(m))
結果:
矩陣m
[[0 1 2]
[3 4 5]
[6 7 8]]
m的轉置T,矩陣矩陣np.transope(m)
[[0 3 6]
[1 4 7]
[2 5 8]]
④ 求逆矩陣
linalg是numpy中用于線性代數(shù)計算的模塊,是linear algebra的簡寫


inv()函數(shù)求逆矩陣
import numpy as np
import numpy.linalg as nlg
m = np.mat(np.array([[4,9],[3,10]]))
inverse_m = nlg.inv(m)
print("矩陣m")
print(m,'\n')
print('m的逆矩陣,nlg.inv(m)')
print(inverse_m,'\n')
print('檢驗,inverse_m * m == 單位矩陣?')
print(inverse_m * m)
結果:
矩陣m
[[ 4 9]
[ 3 10]]
m的逆矩陣,nlg.inv(m)
[[ 0.76923077 -0.69230769]
[-0.23076923 0.30769231]]
檢驗,inverse_m * m == 單位矩陣?
[[1. 0.]
[0. 1.]]
10. 缺失值
缺失值在量化分析中也是一種信息,NumPy提供了nan作為缺失值的記錄,通過isnan函數(shù)判定是否為缺失值。nan_to_num函數(shù)可以將nan替換成0。
np.nan可以得到缺失值,能將浮點數(shù)轉為缺失值
import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)
結果:
[[1. 2.]
[3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
[ 3. 4.]]
isnan函數(shù)可以判斷是否有缺失值
import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)
print("isnan(a):")
print(np.isnan(a))
結果:
[[1. 2.]
[3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
[ 3. 4.]]
isnan(a):
[[False True]
[False False]]
nan_to_num函數(shù)可以將nan值替換為0
import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)
a = np.nan_to_num(a)
print("將缺失值變?yōu)?,nan_to_num()")
print(a)
結果:
[[1. 2.]
[3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
[ 3. 4.]]
將缺失值變?yōu)?,nan_to_num()
[[1. 0.]
[3. 4.]]


