Numpy笔记
1指定numpy类型
a = np.array([3,4,5],dtype=np.int)
Numpy数据类型:
数据类型 | 简介 |
---|---|
bool | 存储为一个字节的布尔值(真或假) |
int | 默认整数,相当于 C 的long,通常为int32或int64 |
int8 | (-128 ~ 127) |
int16 | (-32768 ~ 32767) |
int32 | (-2147483648 ~ 2147483647) |
int64 | 64 位整数(-9223372036854775808 ~ 9223372036854775807) |
uint8 | 8 位无符号整数(0 ~ 255) |
uint16 | 16 位无符号整数(0 ~ 65535) |
uint32 | 32 位无符号整数(0 ~ 4294967295) |
uint64 | 双精度浮点:符号位,11 位指数,52 位尾数 |
float | float64的简写 |
float16 | 半精度浮点:符号位,5 位指数,10 位尾数 |
float32 | 单精度浮点:符号位,8 位指数,23 位尾数 |
float64 | 双精度浮点:符号位,11 位指数,52 位尾数 |
complex | complex128的简写 |
complex64 | 复数,由两个 32 位浮点表示(实部和虚部) |
complex128 | 复数,由两个 64 位浮点表示(实部和虚部) |
1.创建0矩阵
a = np.zeros((3,3))
print(a)
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
2.创建全为1的矩阵
b = np.ones((3,3))
print(b)
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
3.创建空矩阵
c = np.empty((3,3))
print(c)
[[0.000e+000 0.000e+000 0.000e+000]
[0.000e+000 0.000e+000 2.154e-321]
[0.000e+000 0.000e+000 0.000e+000]]
4.np.arange(start,end,step)
返回一个有终点和起点的固定步长的排列
**注:**range()返回的是range object,而np.nrange()返回的是numpy.ndarray()
range可用于迭代,而np.nrange作用远不止于此,它是一个序列,可被当做向量使用。
range()不支持步长为小数,np.arange()支持步长为小数
a = range(4)
b = list(range(4))
print(a)
print(b)
range(4)
[0,1,2,3]
np.arange(1, 5,0.5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
for i in np.arange(3,8)
print(i)
3
4
5
6
7
5.np.reshape((m,n))或np.reshape(m,n)
given a new shape without changing its values
m = np.arange(12).reshape(3,4)
print(m)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
6.np.linspace(start,end,num)
start:起点
end:终点
num:样本数
7.Numpy输出大于或小于某数
a = np.arange(10)
kk = a[a>5]
print(kk)
[6,7,8,9]
8.Numpy的乘法
- 矩阵元素相乘
a = np.arange(1,5).reshape(2,2)
b = [[2,4],
[2,5]]
ele_mul = a * b
print(ele_mul)
[[ 2 8]
[ 6 20]]
- 矩阵相乘: np.dot(a,b) 或 a.dot(b)
a = np.arange(1,5).reshape(2,2)
b = [[2,4],
[2,5]]
mat_mul_1 = np.dot(a,b)
mat_mul_2 = a.dot(b)
print(mat_mul_1,'\n',mat_mul_2)
[[ 6 14]
[14 32]][[ 6 14]
[14 32]]
9.产生随机数矩阵
np.random.random((m,n))产生一个m行n列的矩阵,矩阵元素从0到1
np.random.randint(low,high,size)
if low = num high = None , 返回一个在0到low之间的随机的整型数
if low = num1 high = num2 , 返回一个在low和high之间的随机的整型数
if low = num high = num2 , size=(m,n)返回一个在m行n列的矩阵,其元素是low和high之间的随机的整型数
a = np.random.random((2,4))
b = np.random.randint(4,10,size=(2,2))
print(a)
print(b)
[[0.01297459 0.50184808 0.42188505 0.66899733]
[0.40261174 0.56879188 0.16265641 0.50428789]]
[[7 6]
[5 6]]
10.np.max,np.min,np.sum
函数 | 功能 |
---|---|
np.max(array) | 求矩阵中最大的值 |
np.min(array) | 求矩阵中最小的值 |
np.sum(array) | 求矩阵中求和的值 |
np.sum(array,axis=1) 求矩阵行之和(对于二维数组)
np.sum(array, axis=0)求矩阵列之和(对于二维数组)
axis=0代表往跨行(down),而axis=1代表跨列(across)(二维数组)
三维数组:axis= 0跨第一维度即页,axis=1跨行,axis=0跨列
a = [[2,3,4],
[3,2,4]]
print(np.max(a,axis=1))
print(np.max(a,axis=0))
[4 4]
[3 3 4]
a = np.arange(12).reshape((3,2,2))
print(np.sum(a,axis=0))
print(np.sum(a,axis=1))
[[12 15]
[18 21]]
[[ 2 4]
[10 12]
[18 20]]
11.Numpy其他函数
函数 | 功能 |
---|---|
np.argmin() | 返回矩阵中最小值的索引 |
np.argmax() | 返回矩阵中最大值的索引 |
np.mean()或array.mean() | 返回矩阵中平均值 |
np.average() | 返回矩阵中平均值,可以算加权算术平均值,weights |
np.median() | 求中位数 |
np.cumsum() | 累加矩阵 |
np.diff() | 沿着指定轴计算第N维的离散差值 |
np.eyes(n) | 创建n维度的单位矩阵 |
a = np.array([2,4,6,85,1,5,3,3])
a = a.reshape(2,4)
print(a)
print(np.argmin(a))
print(np.mean(a))
print(np.average(a))
print(np.cumsum(a))
print( np.diff(a))
[[ 2 4 6 85]
[ 1 5 3 3]]
4
13.625
13.625
[ 2 6 12 97 98 103 106 109]
[[ 2 2 79]
[ 4 -2 0]]
12.迭代行和列
a = np.arange(3,15).reshape(3,4)
print(a)
print(a.T)
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]]
#迭代行
for row in a:
print(row)
#迭代列
for column in a.T:
print(colum)
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
13.flat和flatten(将数组转换为1-D)
flat()返回一个迭代器
flatten()返回一个1-D序列
for item in a.flat:
print(item)
print(a.flatten())
3
4
5
6
7
8
9
10
11
12
13
14
[ 3 4 5 6 7 8 9 10 11 12 13 14]
14. Numpy合并
np.vstack((a,b)) vertical stack 垂直方向的合并
np.hstack((a,b)) horizontal 水平方向的合并
a = np.array([1,1,1])
b = np.array([2,2,2])
c = np.vstack((a,b)) #vertical stack 垂直方向的合并
d = np.hstack((a,b)) #horizontal 水平方向的合并
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
15.序列增加维度
a = np.array([1,1,1])
print(a[:,np.newaxis])
print(a[np.newaxis,:])
print(a)
[[1]
[1]
[1]]
[[1 1 1]]
[1 1 1]
16.np.concatenate
np.concatenate((m,n),axis= )数组拼接
默认是 axis = 0,对0轴的数组对象进行纵向的拼接(横向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1。
a = np.array([[1, 2], [5, 7]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
[[1, 2],
[5, 7],
[5, 6]]
传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可
如果对数组对象进行 axis= 1 轴的拼接,方向是横向0轴,a是一个22维数组,axis= 0轴为2,b是一个12维数组,axis= 0 是1,两者的形状不等,这时会报错
np.concatenate((a,b),axis = 1)
正确的做法应该是
np.concatenate((a,b.T),axis = 1)
17.Numpy分割
函数 | 用法 |
---|---|
np.split(array,indices_or_sections,axis=0) | 指定分隔符对字符串进行切片 |
np.hsplit(array,indices_or_sections,axis=0) | 指定分隔符对字符串进行水平方向切片 |
np. vsplit(array,indices_or_sections) | 指定分隔符对字符串进行垂直方向切片 |
np. dsplit(array,indices_or_sections) | 对矩阵沿深度方向切片 |
np.array_split(array,indices_or_sections) | 对矩阵进行不等分的切片 |
a = np.arange(16).reshape(4,4)
print(np.vsplit(a,2))
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
a = np.arange(16).reshape(4,4)
print(np.hsplit(a,2))
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
a = np.arange(16).reshape(4,4)
print(np.split(a,2,axis=1))
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
b = np.arange(64).reshape(4,4,4)
[array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]]), array([[[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]]]), array([[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]]]), array([[[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59],
[60, 61, 62, 63]]])]
a = np.arange(12).reshape(3,4)
print(np.array_split(a,3,axis=1))
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
18.深拷贝和浅拷贝
a = np.arange(12).reshape((3,4))
b = a
b[0][0] = 12
print(a)
aa = np.arange(12).reshape((3,4))
bb = a.copy()
bb[0][0] = 12
print(aa,bb)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]] [[12 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]