1、array的属性
维度:.ndim
形状:.shape
大小:.size
import numpy as np
array = np.array([[1,2,3],[4,5,6]]) #把列表转化为array
print(array)
print('维度是:',array.ndim)
print('形状是:',array.shape)
print('大小是:',array.size)
结果:
[[1 2 3]
[4 5 6]] #没有逗号,(array)数组形式输出
维度是: 2
形状是: (2, 3)
大小是: 6
2、常见array的创建
mxn全零矩阵:.zeros((m,n))
import numpy as np
a = np.zeros((3,4),dtype=int) # dpyte是array的数据类型
print(a)
结果:
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
mxn全一矩阵:.ones((m,n))
import numpy as np
b = np.ones((3,4))
print(b)
结果:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
mxn空矩阵:.empty((m,n))
import numpy as np
c = np.empty((3,4))
print(c)
结果:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
从a到b-1,以步长n生成array:.arange(a,b,n)
import numpy as np
d = np.arange(0,10,2)
print(d)
结果:
[0 2 4 6 8]
从a到b,生成n个元素的array:.linspace(a,b,n)
import numpy as np
e = np.linspace(2,20,10).reshape((2,5))
print(e)
结果:
[[ 2. 4. 6. 8. 10.]
[12. 14. 16. 18. 20.]]
将一个array变成mxn的array:.reshape((m,n))
import numpy as np
f = np.arange(12).reshape((3,4))
print(f)
结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
3、numpy运算
矩阵运算
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.arange(4).reshape((2,2))
print('加法:\n',a+b)
print('减法:\n',a-b)
print('点乘:\n',a*b)
print('矩阵乘法:\n',np.dot(a,b)) #也可用a.dot(b)
print('幂:\n',a**2)
print('转置:\n',a.T)
结果:
加法:
[[1 3]
[5 7]]
减法:
[[1 1]
[1 1]]
点乘:
[[ 0 2]
[ 6 12]]
矩阵乘法:
[[ 4 7]
[ 8 15]]
幂:
[[ 1 4]
[ 9 16]]
转置:
[[1 3]
[2 4]]
对矩阵行列的运算
import numpy as np
a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('行和:\n',np.sum(a,axis=1))
print('列和:\n',np.sum(a,axis=0))
print('最小:\n',np.min(a))
print('最小索引:\n',np.argmin(a))
print('行最小:\n',np.min(a,axis=1))
print('行最小索引:\n',np.argmin(a,axis=1))
print('最大:\n',np.max(a))
print('最大索引:\n',np.argmax(a))
print('列最大:\n',np.max(a,axis=0))
print('列最大索引:\n',np.argmax(a,axis=0))
print('平均数:\n',np.mean(a))
print('中位数:\n',np.median(a))
print('累加:\n',np.cumsum(a))
print('累差:\n',np.diff(a))
print('判断a是否为4:\n',a==4)
print('判断非0元素索引:\n',np.nonzero(a))
结果:
矩阵:
[[0 1 2]
[3 4 5]
[6 7 8]]
行和:
[ 3 12 21]
列和:
[ 9 12 15]
最小:
0
最小索引:
0
行最小:
[0 3 6]
行最小索引:
[0 0 0]
最大:
8
最大索引:
8
列最大:
[6 7 8]
列最大索引:
[2 2 2]
平均数:
4.0
中位数:
4.0
累加:
[ 0 1 3 6 10 15 21 28 36]
累差:
[[1 1]
[1 1]
[1 1]]
判断a是否为4:
[[False False False]
[False True False]
[False False False]]
判断非0元素索引:
(array([0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
数学函数
三角函数 舍入函数
np.sin np.around(x,decimals = 保留的小数位数) # 四舍五入
np.arcsin np.ceil # 向上取整
指数函数 np.floor # 向下取整
np.exp
np.exp2 # 2为底的指数 绝对值函数
对数函数 np.abs
np.log # 自然对数
np.log2
np.log10
随机数
import numpy as np
a = np.random.random((2,2)) # 生成0-1的随机数,(注意他和.rand的不同,他是以元组输入)
b = 6 * np.random.rand(2,2) # 生成0-6的随机数
c = np.random.randint(0, 5, size=(2,3), dtype=np.int32) # 生成0-5的随机整数
d = np.random.randn(2,2) # 生成标准正态分布随机数
e = np.random.normal(0,2,6).reshape((2,3)) # 生成均值为0,标准差为2的6个正态分布随机数
f = np.random.uniform(1,10,(2,3)) # 生成均匀分布的随机数
print('生成0-1的随机数:\n',a)
print('生成0-6的随机数:\n',b)
print('生成0-5的随机整数:\n',c)
print('生成标准正态分布随机数:\n',d)
print('生成均值为0,标准差为2的6个正态分布随机数:\n',e)
print('生成均匀分布的随机数:\n',f)
结果:(每次跑得的结果都不相同)
生成0-1的随机数:
[[0.82675198 0.99958673]
[0.77465162 0.64676349]]
生成0-6的随机数:
[[1.04521646 0.53453153]
[1.57494291 5.31186216]]
生成0-5的随机整数:
[[0 4 2]
[1 1 2]]
生成标准正态分布随机数:
[[ 1.38281039 1.5231954 ]
[-0.7637848 1.10431385]]
生成均值为0,标准差为2的6个正态分布随机数:
[[-2.00167688 1.26613465 0.84036982]
[-1.65738765 -0.58248741 -1.21392371]]
生成均匀分布的随机数:
[[1.51396946 9.16544411 1.88673333]
[9.39330129 2.20742571 1.06484693]]
随机数种子(np.random.seed)
只要种子数相同,就会得到相同的随机数。
import numpy as np
print('种子1的随机数:')
np.random.seed(1)
a = np.random.rand(2,2)
print(a)
np.random.seed(1)
b = np.random.rand(2,2)
print(b)
print('种子2的随机数:')
np.random.seed(2)
c = np.random.rand(2,2)
print(c)
np.random.seed(2)
d = np.random.rand(2,2)
print(d)
结果:
种子1的随机数:
[[4.17022005e-01 7.20324493e-01]
[1.14374817e-04 3.02332573e-01]]
[[4.17022005e-01 7.20324493e-01]
[1.14374817e-04 3.02332573e-01]]
种子2的随机数:
[[0.4359949 0.02592623]
[0.54966248 0.43532239]]
[[0.4359949 0.02592623]
[0.54966248 0.43532239]]
clip函数
import numpy as np
a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('矩阵中小于2的数等于2,大于6的数等于6:\n',np.clip(a,2,6))
结果:
矩阵:
[[0 1 2]
[3 4 5]
[6 7 8]]
矩阵中小于2的数等于2,大于6的数等于6:
[[2 2 2]
[3 4 5]
[6 6 6]]
numpy对array的操作
索引
import numpy as np
a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('a的1行:\n',a[0])
print('a的1行:\n',a[0,:])
print('a的3行2列:\n',a[2][1])
print('a的1列:\n',a[:,0])
结果:
矩阵:
[[0 1 2]
[3 4 5]
[6 7 8]]
a的1行:
[0 1 2]
a的1行:
[0 1 2]
a的3行2列:
7
a的1列:
[0 3 6]
合并
import numpy as np
a = np.arange(9).reshape((3,3))
b = np.ones((3,3), dtype=np.int32)
print('矩阵a:\n',a)
print('矩阵b:\n',b)
print('上下合并:\n',np.vstack((a,b)))
print('左右合并:\n',np.hstack((a,b,a)))
结果:
矩阵a:
[[0 1 2]
[3 4 5]
[6 7 8]]
矩阵b:
[[1 1 1]
[1 1 1]
[1 1 1]]
上下合并:
[[0 1 2]
[3 4 5]
[6 7 8]
[1 1 1]
[1 1 1]
[1 1 1]]
左右合并:
[[0 1 2 1 1 1 0 1 2]
[3 4 5 1 1 1 3 4 5]
[6 7 8 1 1 1 6 7 8]]
分割
import numpy as np
a = np.arange(9).reshape((3,3))
print('矩阵a:\n',a)
print('纵向均等分割:\n',np.vsplit(a,3))
print('横向均等分割:\n',np.hsplit(a,3)) # np.split只能均等分割
print('纵向不等分割:\n',np.array_split(a,2,axis=1))
print('横向不等分割:\n',np.array_split(a,2,axis=0))
结果:
矩阵a:
[[0 1 2]
[3 4 5]
[6 7 8]]
纵向均等分割:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
横向均等分割:
[array([[0],[3],[6]]), array([[1],[4],[7]]), array([[2],[5],[8]])]
纵向不等分割:
[array([[0, 1],[3, 4],[6, 7]]), array([[2],[5],[8]])]
横向不等分割:
[array([[0, 1, 2],[3, 4, 5]]), array([[6, 7, 8]])]
复制
import numpy as np
a = np.arange(9).reshape((3,3))
print('矩阵a:\n',a)
b = a
a[2,1:3] = [10,11]
print('矩阵a改变,b随之改变:\n',b)
c = np.arange(9).reshape((3,3))
d = c.copy()
print('矩阵c改变,d不变:\n',d)
结果:
矩阵a:
[[0 1 2]
[3 4 5]
[6 7 8]]
矩阵a改变,b随之改变:
[[ 0 1 2]
[ 3 4 5]
[ 6 10 11]]
矩阵c改变,d不变:
[[0 1 2]
[3 4 5]
[6 7 8]]