Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
其为第三方库:numpy官网
savetxt : 保存数据。loadtxt : 读取数据。
import numpy as np
a = np.arange(60).reshape(20, 3) # arange创建一个一维数组,reshape,将其转化为20行3列的数组
print(a)
# 1: 要保存的文件名,要保存的数组,保存的数据格式,分隔符(大多都是从csv中读取数据)
np.savetxt("c.csv", a, fmt="%.2lf", delimiter=",") # 保存数据
# unpack 用多个变量取数据,x,y,z对应三列
x, y, z = np.loadtxt("c.csv", delimiter=",", unpack=True) # 取数据
print(x)
print(y)
print(z)
import numpy as np
# (创建ndarry数组)(dtype: 数据类型,另有float64, int32,int64,string_,bool...)
x = np.array([1, 2, 3, 4, 5, 6, 7, 8], dtype=np.float32)
print("1:", x)
y = np.array((1, 2, 3, 45, 6, 7, 8))
print("2:", y)
a = np.arange(24) # 创建一个一维数组
print("3:", a)
b = np.ones((2, 3, 4)) # 创建一个各项都为1的三维数组(2:两个二维数组,3:每个二维数组为三行,4:每个二维数组为四列)
print("4:", b)
c = np.zeros((3, 6), dtype=np.float32) # 创建一个各项都为0.的,二维数组(三行六列)
print("5:", c)
d = np.eye(5) # 形成正方形矩阵(对角线为1)
print("6:", d)
e = np.ones_like(a) # like(a):创建与a数组类型一样的数组
print("7:", e)
f = np.zeros_like(b)
print("8:", f)
g = np.full_like(a, 23) # 更改了其中的元素(全改成了23)
print("9:", g)
h = np.linspace(1, 10, 4) # 步距为4
print("10:", h) # np.concatenate() 将两个或多个数组合并成一个新的数组
i = np.linspace(1, 10, 4, endpoint=False) # endpoint:是否包括末数字
print("11:", i)
j = x.reshape(2, 4) # 需要保证元素的总个数不变(与原数组总个数相同){a = np.arange(6).reshape(2,3)}
print("12:", j) # 不改变x数组的值
print(x) # 如x.resize(shape)则改变了x数组的值
# x.swapaxes(1,2)将数组n个维度中两个维度进行调换
k = c.flatten() # 对原数组进行降维(直接降到一维),不改变之前的数组
print("13:", k)
l = x.astype(np.float) # 改变数据类型(np.int)也行
print("14:", l)
m = b.tolist() # (转换成列表)
print(m)
n = np.array([9, 8, 7, 6, 5]) # 一维
print("15:", n[2])
print(n[1:4:2])
o = np.arange(24).reshape((2, 3, 4))
print(o)
print("16:", o[1, 2, 3])
print(o[0, 1, 2])
print(o[-1, -2, -3]) # (注意用逗号分隔)
print("17:", o[:, 1, -3])
print("18:", o[:, 1:3, :])
print("19:", o[:, :, ::2])
o = np.arange(24).reshape((2, 3, 4))
print(o)
print("20:", o.mean()) # 求各个元素的平均数
print(o/o.mean())
'''
np.abs(o) np.fab(o) 计算各元素的绝对值
np.sqrt(o) 平方根
np.square(o) 平方
np.log(o) np.log2(o) np.log10(o) 对数
np.cell(o) np.floor
np.rint(o) 四舍五入
np.modf(o) 以整数和小数两个路径返回
三角函数
np.exp(o) 指数
np.sign(o) 计算各元素的符号值
+ - * / ** 2323
最大最小值的运算
np.copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == != 算数比较产生布尔型数组
'''
import numpy as np
a = np.random.rand(3, 4, 5) # 随机浮点数[0,1)
print("1:", a)
b = np.random.randn(3, 4, 5) # 标准正态分布数据
print("2:", b)
c = np.random.randint(100, 200, (3, 4)) # 100,200为数据范围,(3,4)为二维数组
print("3:", c)
np.random.seed(100)
# 提供随机数种子,seed( ) 用于指定随机数生成时所用算法开始的整数值。
# 1.如果使用相同的seed( )值,则每次生成的随即数都相同;
# 2.如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
# 3.设置的seed()值仅一次有效
d = np.random.randint(100, 200, (3, 4))
print("4:", d)
print(".............................................................")
e = np.random.randint(100, 200, (3, 4))
print("5:", e)
f = np.random.shuffle(e) # 用于将一个列表中的元素打乱
print("6:", f)
print("7:", e)
g = np.random.permutation(e) # 根据e的第一轴产生新的,不改变e
print("8:", g)
h = np.random.randint(100, 200, (8,))
print("9:", h)
i = np.random.choice(h, (3, 2)) # 选取h中的元素,组成(3,2)的数组
print("10", i)
j = np.random.choice(h, (3, 2), replace=False) # 是否各元素重复
print("11", j)
k = np.random.uniform(0, 10, (3, 5)) # 产生具有均匀分布的数组
print("12", k)
l = np.random.normal(10, 5, (3, 4)) # 产生具有正态分布的数组,10为均值,5为标准差
print("13:", l)
import numpy as np
a = np.arange(15).reshape(3, 5)
print("1:", a)
b = np.sum(a)
print("2:", b)
c = np.mean(a, axis=1)
print("3:", c)
d = np.mean(a, axis=0) # axis是1为行,0为各列求
print("4:", d)
e = np.average(a, axis=0, weights=[10, 5, 1]) # 加权平均
print(e)
# np.std(a,axis=None) 标准差
# np.var(a,axis=None) 方差
print("'''''''''''''''''''''''''''''''''''''''''''''''")
f = np.arange(15, 0, -1).reshape(3, 5)
print("5:", f)
# np.max(f) np.min(f) 元组中元素的最大最小值
g = np.argmax(f) # 最大值降成一维后的下标 argmin(最小值的)
print("6:", g)
h = np.unravel_index(np.argmin(f), f.shape) # 转换成多维下标
print("7:", h)
# np.ptp(f) 最大值与最小值的差
# np.median(f) 计算数组f中元素的中位数
import numpy as np
a = np.random.randint(0, 20, (5,))
print("1:", a)
b = np.gradient(a)
print("2:", b)
# [a, b, c, d, e]
# 计算方式.第一个: 第一位 = (b - a) / 1
# 第二个: (c - a) / 2
# 中间的 : (d - b) / 2
# 第四个: (e - c) / 2
# 最后一个:(e - d) / 1
c = np.random.randint(0, 50, (3, 5))
print("3:", c)
d = np.gradient(c)
print("4:", d) # 得两个数组,第一个数组为最外层维度的梯度值,第二个数组表示第二层维度的梯度值
'''
[array([[-11. , -34. , 35. , 12. , -19. ],
[ 4.5, -4. , -1. , -0.5, -6.5],最外层维度的梯度
[ 20. , 26. , -37. , -13. , 6. ]]),
array([[ 26. , -1. , -16. , 7.5, 19. ],
[ 3. , 22. , 7. , -19.5, -12. ],第二层维度的梯度
[ 9. , -6.5, -12.5, 2. , 7. ]])]
'''
import numpy as np
import numpy.matlib
a = np.matlib.empty((2, 2)) # 返回一个新的矩阵
print("1.", a)
b = np.matlib.zeros((2, 2)) # 创建一个元素均为0的矩阵
print("2.", b)
c = np.matlib.ones((2, 2)) # 创建一个元素均为1的矩阵
print("3.", c)
d = np.matlib.eye(3, 4, dtype=int) # 创建一个对角线为1的矩阵
print("4.", d)
e = np.matlib.rand(3, 3) # 创建一个矩阵,数据随机填充
print("5.", e)