import numpy as np
np.__version__
'1.14.3'
ndarray 数组类型
array=[1,2,3,4,5,6]
array
[1, 2, 3, 4, 5, 6]
array=np.array([1,2,3,4,5,6])
type(array)
numpy.ndarray
array+1
array([2, 3, 4, 5, 6, 7])
#加法
array2=array+array
array2
array([ 2, 4, 6, 8, 10, 12])
#乘法
array3=array*array
array3
array([ 1, 4, 9, 16, 25, 36])
#取值
array[0]
1
array[3]
4
array3[0]
1
array3[-1]
36
array3[0:3]
array([1, 4, 9])
shape属性:描述数组每一维度的数量
#数组的形状
array3.shape
(6,)
array4=np.array([[1,2,3,4],[6,7,8,9]])
array4
array([[1, 2, 3, 4],
[6, 7, 8, 9]])
array4.shape
(2, 4)
dtype属性:描述数组的数据类型
#数据类型
array4.dtype
dtype('int32')
array5=np.array([[1,2,3.3],[4,5,6.6]])
array5
array([[1. , 2. , 3.3],
[4. , 5. , 6.6]])
array5.dtype
dtype('float64')
size:数组中元素的个数
#数组中元素的个数
array.size
6
ndim:数组维度
#维度
array.ndim
1
array5.ndim
2
fill:数组的填充
array5.fill(3)
array5
array([[3., 3., 3.],
[3., 3., 3.]])
zeros:创造全0数组
array6=np.zeros(10)
array6
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
array7=np.zeros((3,6))
array7
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
ones:创造全1数组
array8=np.ones(10)
array8
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
empty:创建一个没有初始化数值的数组
array9=np.empty((2,3,2)) #2行3列数组,每个两个
array9
array([[[1.26571722e-311, 2.81617418e-322],
[0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 2.92966904e-033]],
[[6.25646211e-091, 4.85407811e-033],
[8.31416635e-072, 9.50149044e-043],
[6.48224659e+170, 4.93432906e+257]]])
#构造随机的10个数
random_array=np.random.rand(10)
random_array
array([0.78756154, 0.81028858, 0.45480779, 0.99079478, 0.57853666,
0.39447223, 0.51847974, 0.05889269, 0.83743346, 0.34482113])
np.arange()
函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是6,步长为1。
参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况:
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
array10 = np.arange(0,100,10) #起点为0,终点为100,步长为10
array10
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
布尔值
array11=np.array([0,1,2,0],dtype=bool)
array11
array([False, True, True, False])
NumPy 计算
array=np.array([[1,2,3],[4,5,6]])
array
array([[1, 2, 3],
[4, 5, 6]])
#求和
np.sum(array)
21
#按行求和:行和行相加(每一行的元素逐个对应相加)
np.sum(array,axis=0)
array([5, 7, 9])
#按列求和:列和列相加
np.sum(array,axis=1)
array([ 6, 15])
注:
axis=0:沿着每一列或行标签执行
axis=1:沿着每一行或列标签执行
array.ndim #查看维度
2
array
array([[1, 2, 3],
[4, 5, 6]])
prod:求乘积
#求乘积
array.prod()
720
array.prod(axis=0)
array([ 4, 10, 18])
array.prod(axis=1)
array([ 6, 120])
max/min:求最大最小值
#求最大最小值
array.max()
6
array.min()
1
array.max(axis=0)
array([4, 5, 6])
array.max(axis=1)
array([3, 6])
array.min(axis=0)
array([1, 2, 3])
array.min(axis=1)
array([1, 4])
argmax/argmin:求最大最小索引
#求最大最小索引
array.argmax()
5
array.argmax(axis=0)
array([1, 1, 1], dtype=int64)
array.argmax(axis=1)
array([2, 2], dtype=int64)
array.argmin()
0
array.argmin(axis=0)
array([0, 0, 0], dtype=int64)
array.argmin(axis=1)
array([0, 0], dtype=int64)
mean:求均值
#求均值
array.mean()
3.5
array.mean(axis=0)
array([2.5, 3.5, 4.5])
array.mean(axis=1)
array([2., 5.])
排序
array=np.array([[1,56,98],[21,65,12]])
array
array([[ 1, 56, 98],
[21, 65, 12]])
#排序
np.sort(array)
array([[ 1, 56, 98],
[12, 21, 65]])
np.sort(array,axis=0)
array([[ 1, 21, 65],
[12, 56, 98]])
#默认指定列排序
np.sort(array,axis=1)
array([[ 1, 56, 98],
[12, 21, 65]])
#返回索引
np.argsort(array)
array([[0, 1, 2],
[0, 1, 2]], dtype=int64)
np.argsort(array,axis=0)
array([[0, 1, 1],
[1, 0, 0]], dtype=int64)
np.argsort(array,axis=1)
array([[0, 1, 2],
[0, 1, 2]], dtype=int64)
数组形状
array.shape
(2, 3)
array
array([[ 1, 56, 98],
[12, 21, 65]])
array.shape=3,2 #行列互换
array
array([[ 1, 56],
[98, 12],
[21, 65]])
array.shape=6
array
array([ 1, 56, 98, 12, 21, 65])
array.shape=1,6
array
array([[ 1, 56, 98, 12, 21, 65]])
array.reshape(1,6)
array([[ 1, 56, 98, 12, 21, 65]])
array.reshape(6,1)
array([[ 1],
[56],
[98],
[12],
[21],
[65]])
reshape函数是MATLAB中将指定的矩阵变换成特定维数矩阵一种函数,且矩阵中元素个数不变,函数可以重新调整矩阵的行数、列数、维数。
函数语法为B = reshape(A,size)是指返回一个和A元素相同的n维数组,但是由向量size来决定重构数组维数的大小。
array.shape
(1, 6)
array.ndim
2
# 新增维度
array1 = array[np.newaxis,:]
array1
array([[[ 1, 56, 98, 12, 21, 65]]])
array1.ndim
3
array2 = array[:,np.newaxis,np.newaxis,np.newaxis]
array2
array([[[[[ 1, 56, 98, 12, 21, 65]]]]])
array2.ndim
5
array2.shape
(1, 1, 1, 1, 6)
array3 = array[np.newaxis,:,np.newaxis]
array3
array([[[[ 1, 56, 98, 12, 21, 65]]]])
array3.shape
(1, 1, 1, 6)
#压缩
array2 = array2.squeeze()
array2.shape
(6,)
array2 = array2.reshape(2,3)
array2
array([[ 1, 56, 98],
[12, 21, 65]])
#数组的转置
array2.T
array([[ 1, 12],
[56, 21],
[98, 65]])
数组的连接
array1=np.arange(0,6)
array1
array([0, 1, 2, 3, 4, 5])
array2=np.arange(6,12)
array2
array([ 6, 7, 8, 9, 10, 11])
array3=np.concatenate((array1,array2))
array3
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
数组的生成
np.array([1,2,3])
array([1, 2, 3])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
np.arange(0,10,2,dtype=np.float32)
array([0., 2., 4., 6., 8.], dtype=float32)
linspace:构建等差数列
np.linspace(0,10,10) # 创建等差数列,等距分布0-10之间的10个数,每次增加10/9
array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444,
5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])
logspace:构建等比数列
np.logspace(0,9,10)
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,
1.e+08, 1.e+09])
生成函数
#构造一个全0矩阵
np.zeros(3)
array([0., 0., 0.])
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
np.zeros((3,2))
array([[0., 0.],
[0., 0.],
[0., 0.]])
np.ones(3)
array([1., 1., 1.])
np.ones((2,3))
array([[1., 1., 1.],
[1., 1., 1.]])
np.ones((3,2))
array([[1., 1.],
[1., 1.],
[1., 1.]])
ndarray 计算
x=np.arange(0,2)
x
array([0, 1])
y=np.arange(4,6)
y
array([4, 5])
x*y
array([0, 5])
np.multiply(x,y)
array([0, 5])
# 矩阵乘法 (点积)
np.dot(x,y)
5
x = np.arange(0,6)
x = x.reshape(2,3)
x
array([[0, 1, 2],
[3, 4, 5]])
y = np.arange(0,6)
y = x.reshape(3,2)
y
array([[0, 1],
[2, 3],
[4, 5]])
np.dot(x,y) #(2,3)*(3,2)=(2,2)
array([[10, 13],
[28, 40]])
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.random.shuffle(x) #随机打乱顺序
x
array([4, 5, 3, 1, 2, 8, 7, 6, 9, 0])
数组的比较
x = np.array([1,2,3])
y = np.array([1,2,2])
x==y #对应元素逐个相比较
array([ True, True, False])
# 逻辑与
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_and(x,y)
array([False, False, True])
# 逻辑或
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_or(x,y)
array([ True, True, True])
# 逻辑非
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_not(x,y)
array([0, 1, 0])
随机模块 np.random
np.random.rand(2,3)
array([[0.63487633, 0.59668801, 0.15900207],
[0.80550753, 0.92506804, 0.76315239]])
np.random.randint(5,10,size=(2,3)) #用于生成指定范围内的整数
array([[6, 5, 5],
[9, 9, 5]])
# 随机数种子
np.random.seed(0) #使得随机数可预测
np.random.randint(5,10,size=(2,3))
array([[9, 5, 8],
[8, 8, 6]])
# 固定的随机数
np.random.seed(0)
np.random.random_sample()
0.5488135039273248
# 获得标准正态分布的一组数
mu , sigma = 0 , 0.1
nor = np.random.normal(mu,sigma,100)
nor
array([ 0.07415917, 0.15529137, -0.22683282, 0.13335454, -0.08427241,
0.19699244, 0.12661185, -0.05058765, 0.25452008, 0.10808119,
0.04843122, 0.05791405, -0.01815826, 0.14102046, -0.03744717,
0.02751983, -0.09607546, 0.0376927 , 0.00334389, 0.06805672,
-0.15634967, -0.05666976, -0.02421495, 0.15143913, -0.03330574,
0.00473648, 0.14627404, 0.15350291, 0.056644 , 0.01492651,
-0.1078278 , 0.13954723, 0.1787484 , -0.05695173, 0.01753865,
-0.04625055, -0.10858006, 0.0639736 , -0.03858633, -0.07757624,
0.09957113, -0.19332048, 0.02485306, -0.00312453, -0.0139474 ,
-0.0190656 , 0.04486375, -0.09924298, -0.02259397, -0.16545708,
-0.06397226, -0.04794198, 0.03113635, -0.07760205, -0.03073648,
-0.03665239, 0.1119712 , -0.04579224, 0.04253934, -0.00279712,
0.14759898, 0.06467801, -0.03643343, -0.06787774, -0.03536279,
-0.07407475, -0.06750218, -0.01327843, 0.06198011, 0.17911685,
0.01710004, -0.17256714, 0.01606585, -0.08589853, -0.02064209,
0.04884265, -0.0838331 , 0.03811637, -0.09909033, 0.101788 ,
0.03415874, -0.12508862, 0.09252508, -0.09047862, 0.18436915,
0.15255072, -0.14455356, 0.03771606, -0.00705572, 0.06041597,
0.0472149 , 0.08199173, 0.09075196, -0.05858229, 0.09375588,
-0.02546081, 0.09735987, 0.02072828, 0.1099642 , 0.0939897 ])
matplotlib画图
pip install matplotlib
import matplotlib.pyplot as plt
plt.plot(np.arange(100),nor,'ro-')
plt.show
<function matplotlib.pyplot.show(*args, **kw)>
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.random.shuffle(a) # 洗牌
a
array([2, 7, 9, 4, 0, 1, 3, 8, 5, 6])
文件读写
%%writefile test2.txt
1,2,3,4,5,6
2,3,5,8,9,10
Writing test2.txt
np.loadtxt('test2.txt',delimiter=',') # delimiter 分隔符定义
array([[ 1., 2., 3., 4., 5., 6.],
[ 2., 3., 5., 8., 9., 10.]])
x = np.arange(10)
x = x.reshape(2,5)
y = np.arange(10,20)
y = y.reshape(2,5)
x,y
(array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), array([[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]]))
# 保存
np.savetxt('test.txt',x)
np.loadtxt('test.txt')
array([[0., 1., 2., 3., 4.],
[5., 6., 7., 8., 9.]])
# npy
np.save('test.npy',x) # 写入
np.load('test.npy') # 读取
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
# 通过npz格式可以压缩存储多个npy文件
np.savez('test.npz',a=x,b=y)
# 读取npz文件
data = np.load('test.npz')
data.files #获取文件
['a', 'b']
data['a']
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
data['b']
array([[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])