numpy学习笔记
NumPy 简介
NumPy 是 Python 中用于数值计算的第三方库,名称来自 Numerical Python,意思是“数值计算的 Python”。
它的核心是多维数组
ndarray,方便我们存储数据,并对大量数据进行数学运算。
np的属性
import numpy as np
array = np.array([[1,2,3],
[2,3,4]
])
print(array)
print('number of dim:', array.ndim) #np数组的维度
print('shape:', array.shape) #np数组的形状
print('size:', array.size) #np数组的元素总个数

np的创建 array
- dtype= data type,数组内元素的数据类型
a = np.array([1,2,3],dtype=np.int64)
print(a)
a = np.array([1,2,3],dtype=np.float64)
print(a)
- 零矩阵和一矩阵
a = np.zeros((3,4))
print(a)
a = np.ones((3,4))
print(a)
- 有序数列的创建 np.arange(start,stop,step)
a = np.arange(10,20,2)
print(a)
- reshape()变换列表形状
a = np.arange(12).reshape(3,4)
print(a)

- 生成线段 linspace(start,stop,num) , num表示start和stop之间有多少个节点
a = np.linspace(1,10,6)
print(a)

numpy的基础运算
- np数组的四则运算,直接对数组操作
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
c = a-b
print(c)
c = a+b
print(c)
c = b**2
print(c)

- 通过print()使用条件表达式筛选数据
b = np.arange(4)
print(b)
print(b<3)
print(b==2)

- 数组的各元素相乘和矩阵相乘
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape(2,2)
print(a,b,sep="\n")
c = a*b #a的各元素与b对应元素相乘
c_dot = np.dot(a,b) #矩阵相乘
print(c)
print(c_dot)

- 在np数组中找到特定的元素
a = np.random.random((2,4)) #生成2行4列的0-1之间的随机数
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))

- axis的用法
axis=0表示对列进行操作,axis=1表示对行进行操作
print(np.sum(a,axis=0)) #对于二维数组,axis=0表示对列进行操作,axis=1表示对行进行操作
print(np.min(a,axis=1))
print(np.max(a,axis=0))

- 其他函数的用法
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.argmin(a)) #最小值的索引
print(np.argmax(a)) #最大值的索引
print(np.mean(a)) #平均值
print(np.median(a)) #中位数
print(np.cumsum(a)) #累加

a = np.array([[1,0,5,2],
[4,1,8,5],
[8,7,3,9]])
print(np.diff(a)) #用来计算数组中相邻元素之间的差值, 后一个元素 − 前一个元素
print(np.nonzero(a)) #非零元素在数组中的位置
print(np.transpose(a)) #矩阵转置
print(np.clip(a,4,7)) #把数组中的元素限制在指定范围内

a = np.arange(3,15).reshape(3,4)
print(a.flatten()) #压缩为1维矩阵

numpy的array合并
- 把两个数组上下合并和左右合并
a = np.array([1,1,1])
b = np.array([2,2,2])
c = np.vstack((a,b)) #上下合并
print(c)
d = np.hstack((a,b)) #左右合并
print(d)

- 当我们需要把a和b转置后的数组进行合并时,我们先用a.T来看一下结果
a = np.array([1,1,1])
print(a.T)

结果还是没变,这是因为a是一个一维数组,a.T并不对一维数生效
我们可以使用[:,np.newaxis]来增加一列,[np.newaxis,:]来增加一行。: 表示原来的维度,在这个例子中就是3
a = np.array([1,1,1])
print(a[:,np.newaxis])

a = np.array([1,1,1])[:,np.newaxis]
b = np.array([2,2,2])[:,np.newaxis]
c = np.hstack((a,b))
d = np.vstack((a,b))
print(c)
print(d)

numpy的array分割
- np.split()只能把数组分成等份的数组,而np.array_split可以分成不等份的数组
a = np.arange(12).reshape(3,4)
print(a)
print(np.split(a,2,axis=1)) #axis=1表示对行进行操作,axis=0表示对列进行操作
print(np.split(a,3,axis=0))
print(np.array_split(a,3,axis=1))

numpy的copy和deep copy
- 在numpy中,如果把一个变量赋值给另一个变量,则新的变量就是完完全全的被赋值的变量,即这两个变量指向同一块内存
a = np.array([1,2,3,4])
print(a)
a[0] = 11
b = a
print(b)
c = a
print(c)
d = b
print(d)

同理,改变d的值同样也会改变a,b,c的值
d[1:3] = [22,33]
print(d)
print(a)
print(b)
print(c)

如果我们只想单纯的把a赋值给b,但是不想把两者关联起来,就可以使用到np.copy(),即deep copy
b = np.copy(a)
a[3] = 44
print(a)
print(b)

✨ Process finished successfully!

浙公网安备 33010602011771号