numpy
numpy(Numerical Python)是Python语言的一个扩展程序库,支持大量
的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
本质是一个数组,可以为一维、二维多维等
安装:
在pycharm设置中安装
引用:
import numpy
常用:
import numpy as np
?创建数组
创建数组:
numpy使用array([...])建立数组,其中[...]是数组的数据
a = numpy.array([1, 2, 3])
import numpy as np
a = np.array([1, 2, 3])
for i in a:
print(i)
1
2
3
array = np.array([[1,2,3],[2,3,4]]) (多维每个维度的数据个数需要相等)
for i in range(2):
print(array[i])
[1 2 3]
[2 3 4]
?数组类型
注:中间无逗号分隔
指定int型
a = np.array([1,2,3],np.int)
print(a)
[1 2 3]
指定float型
a = np.array([1.6,2.0,3],np.float)
print(a)
[1.6 2. 3. ]
指定float型
a = np.array([1.6,2.0,3],np.float)
print(a)
['hello' 'world']
?数组维度
数组维度:
使用ndim获取数组维度
使用shape获取每个维度的大小,shape是一个元祖
a = np.array([1,2,3])
print(a.ndim)
print(a.shape)
1
(3,) # 三列
a = np.array([[1,2,3],[2,3,4]])
print(a.ndim)
print(a.shape)
2
(2, 3) # 两行,三列
特殊数组的创建与数组操作
import numpy as np
np.zeros(shape,dtype)创建形状为shape类型为dtype的全0数组
np.ones(shape,dtype)创建形状为shape类型为dtype的全1数组
np.empty(shape,dtype)创建形状为shape类型为dtype的全空数组(非真空),数组内为随机值
np.random.random(shape)创建形状为shape,值为(0,1)范围均匀分布随机值的数组
np.random.randint(a,b,shape)创建形状为shape,值为[a,b)范围内随机整数值的数组
np.random.normal(mu,std,shape)创建形状为shape,平均值为mu,均方差为std的正态分布数组
arange
np.arange(start,end,step,dtype)
创建[start,end),步长为step,类型为dtype的数组,start默认为0,step默认为1
dtype默认为int
linspace
np.linspace(start,end,n,endpoint) (数组类型为float)
创建将[start,end]按n等分,默认endpoint=True包含end值,endpoint=Flase不包含end值
reshape
a.reshape(m,n...)改变数组a为形状为(m,n...)的数组并返回
ravel
a.ravel()将高维数组a拉伸为一维数组并返回
改变数组类型
np.astype(dtype)改变数组类型为dtype
import numpy as np
a = np.array([1,2,3],np.float)
a = a.astype(int)
print(a.dtype)
int32
?数组切片
a[sliceX,sliceY]
如果sliceX或者sliceY为单一数值,表示取出X行Y列的元素
如果sliceX或者sliceY为:,表示取出一行或一列
a = np.arange(8)
a = a.reshape(2,4)
print(a)
print(a[1,1])
print(a[:,1])
print(a[1,:])
print(a[:,:])
[[0 1 2 3]
[4 5 6 7]]
5
[1 5]
[4 5 6 7]
[[0 1 2 3]
[4 5 6 7]]
?数组计算
常数和数组进行四则运算:
结果是每个元素都与该常数进行四则运算
两个相同形状的数组进行四则运算:
结果是数组的每个元素与对应元素进行四则运算
数组统计计算
numpy定义了对数组的最大值max,最小值min,平均值mean,总和值sum的统计运算
a为一个shape(m,n)的二维数组,规则如下:
(如不带axis则代表所有元素)
最终返回一个一维数组
import numpy as np
a = np.arange(6).reshape(2,3)
print(a)
print(np.max(a,axis=0)) # 计算每一列最大的值
print(np.max(a,axis=1)) # 计算每一行最大的值
print(np.min(a,axis=0)) # 计算每一列最小的值
print(np.min(a,axis=1)) # 计算每一行最小的值
print(np.mean(a,axis=0)) # 计算每一列的平均值(float)
print(np.mean(a,axis=1)) # 计算每一行的平均值(float)
print(np.sum(a,axis=0)) # 计算每一列的和
print(np.sum(a,axis=1)) # 计算每一行的和
[[0 1 2]
[3 4 5]]
[3 4 5]
[2 5]
[0 1 2]
[0 3]
[1.5 2.5 3.5]
[1. 4.]
[3 5 7]
[ 3 12]
?数组数据排序
a为一个shape(m,n)的二维数组,排序规则如下:
import numpy as np
a = np.random.randint(0,5,(2,5))
print(a)
print(np.sort(a,axis=0)) # 按列升序排序
print(np.sort(a,axis=1)) # 按行升序排序
print(np.sort(a)) # 默认axis=1,按行升序排序
[[0 4 0 0 4]
[0 3 3 4 0]]
[[0 3 0 0 0]
[0 4 3 4 4]]
[[0 0 0 4 4]
[0 0 3 3 4]]
[[0 0 0 4 4]
[0 0 3 3 4]]
?数组CSV存储
np.savetxt('文件名',数组,delimiter=',')
以,分隔数组存储为文件名的csv格式文件
np.loadtxt('文件名',delimiter=',',dtype=np.int)
以,分隔读取文件导出数组类型为int的数组
import numpy as np
a = np.arange(12).reshape(3,4)
print(a)
np.savetxt('data.csv',a,delimiter=',')
b = np.loadtxt('data.csv',delimiter=',',dtype=np.int)
print(b)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
?数组增加
a是形状为shape(m,n)的数组:
如果b是shape(k,n)形状,那么np.append(a,b,axi=0)代表数组b将数组b的每一列元素
添加到数组a对应列的最后依次排列,返回一个shape(m+k,n)的数组
import numpy as np
a = np.arange(10).reshape(2,5)
b = np.arange(15).reshape(3,5)
print(a)
print(b)
c = np.append(a,b,axis=0) # 将数组b的每一列元素添加到数组a对应列的最后依次排列
print(c)
[[0 1 2 3 4]
[5 6 7 8 9]]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
a是形状为shape(m,n)的数组:
如果b是shape(m,k)形状,那么np.append(a,b,axi=1)代表将数组b的每一行元素
添加到数组对应行的最后依次排列,返回一个shape(m,n+k)的数组
a = np.arange(10).reshape(2,5)
b = np.arange(14).reshape(2,7)
print(a)
print(b)
c = np.append(a,b,axis=1) # 将数组b的每一行元素添加到数组对应行的最后依次排列
print(c)
[[0 1 2 3 4]
[5 6 7 8 9]]
[[ 0 1 2 3 4 5 6]
[ 7 8 9 10 11 12 13]]
[[ 0 1 2 3 4 0 1 2 3 4 5 6]
[ 5 6 7 8 9 7 8 9 10 11 12 13]]
数组删除?
np.delete(a,slice,axis=0)按行删除slice切片的元素并返回一个数组
np.delete(a,slice,axis=1)按列删除slice切片的元素并返回一个数组
import numpy as np
a = np.arange(12).reshape(3,4)
print(a)
b = np.delete(a,0,axis=0) # 删除数组a第0行
print(b)
c = np.delete(a,0,axis=1) # 删除数组a第0列
print(c)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 4 5 6 7]
[ 8 9 10 11]]
[[ 1 2 3]
[ 5 6 7]
[ 9 10 11]]
?特殊值?
np.nan特殊值类似于NULL(数组类型需要为float)
import numpy as np
a = np.arange(15)
a = a.reshape(3,5)
a = a.astype(float)
a[0,0] = np.nan
a[2,3] = np.nan
print(a)
np.isnan(a) 判断数组a元素是否为nan,返回一个bool类型的数组
[[nan 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. nan 14.]]
inf特殊值是一个无限大的数
np.isinf(a) 判断数组a元素是否为inf,返回一个bool类型的数组
特殊选取
a[b]选取b为True的元素
import numpy as np
a = np.random.random((3,5))
print(a)
b = a > 0.5
print(b)
a[b] = 0
print(a)
[[0.08432831 0.54384918 0.08748855 0.16821039 0.05190842]
[0.50787147 0.53117094 0.81952622 0.84543089 0.87711453]
[0.86997402 0.2631162 0.82484525 0.61112315 0.34068113]]
[[False True False False False]
[ True True True True True]
[ True False True True False]]
[[0.08432831 0. 0.08748855 0.16821039 0.05190842]
[0. 0. 0. 0. 0. ]
[0. 0.2631162 0. 0. 0.34068113]]
集成函数
numpy集成了很多函数一般规则是np.fun()并返回一个数组,其中fun是定义的一个函数
np.sqrt(a) 对数组a所有元素开平方
np.sin(a) 对数组a所有元素求sin(使用的元素是弧度)
数组可以和常数进行大小运算 对数组所有元素和常数比较,返回一个bool类型的数组
两个形状相同的数组可以进行大小运算 数组相对应元素进行比较,返回一个bool类型的数组
a.max() 求数组a所有元素的最大值
a = a * a 求a数组内所有数据的平方
...
|