Python-总结笔记-Numpy使用

本文总结了Python中Numpy库的使用,包括创建ndarray、数组运算、排序、numpy.linalg运算、索引切片、数据类型转换等核心功能。详细介绍了如np.array、np.sum、np.sort、np.linalg.inv、np.reshape等关键函数,并提供了丰富的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下为本人自学(练习案例和阅读参考书《利用Python进行数据分析》)在学校课程中关于Numpy的用法总结笔记:

创建ndarray:

  • array= np.array(data)
  • array.fill(0)
  • np.linspace(start, end, num):起始值、终止值、元素个数
  • np.arange(start, end, step,dtype = ):起始值、终止值、步长
  • np.logspace(start, end, num):从10 ^ start 到 10 ^ end 均匀生成num个数字
  • np.zeros() / np.ones() :生成全为0 / 1 的数组
print(np.zeros(3))  # [0. 0. 0.]
print(np.zeros((3, 3)))
'''
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''
print(np.ones((3, 3)) * 8)
'''
[[8. 8. 8.]
 [8. 8. 8.]
 [8. 8. 8.]]
'''
  • np.zeros_like(array) / np.ones_like(array):生成与array形状相同的全为0 / 1的数组
  • np.eye(a, b, k=) :生成a行b列对角线为1其余为0的矩阵;k默认为0,当为负数时表示低对角,正数时表示高对角
>>> np.eye(2,3)
array([[1., 0., 0.],
       [0., 1., 0.]])
>>> np.eye(3,k=1)
array([[0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 0.]])
>>> np.eye(4,5,k=-2)
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.]])
  • np.identity():生成对角矩阵(单位矩阵)【方阵】
  • np.random.randint(start,end,num) / np.random.randint(end, size=(,)):start/0 到 end的数据里面选num个或size形状的随机数
print(np.random.randint(0, 10, 3))  # [0 2 7]
print(np.random.randint(10, size=(5, 4)))  # 返回的是随机的整数,左闭右开
'''
[[0 0 8 5]
 [0 5 2 2]
 [6 0 3 6]
 [0 1 9 4]
 [2 1 1 5]]
'''
  • np.random.rand(num) / np.random.rand((a,b)) :0~1均匀分布
print(np.random.rand(10))  # 0~1均匀分布
# [0.74551281 0.06652034 0.15436721 0.21996444 0.72814643 0.18732605 0.2853264  0.98705669 0.70645348 0.21864115]
print(np.random.rand(3, 2))  # 所有的值都是从0到1
'''
[[0.55855614 0.83403845]
 [0.91090671 0.16489897]
 [0.23521679 0.73634089]]
  • np.random.random_sample(num):0~1非均匀分布
  • np.random.normal(mean, std, num):生成正态分布
  • np.random.seed(100) :恒定的方式随机,常用于构建train test数据集

ndarray运算

  • 普通的+ - * / 为对应位置运算
    在这里插入图片描述
  • 数值计算:
    np.sum(array,axis=0) / array.sum(axis=0) :axis=0时纵向求和,axis=1时横向求和,无axis时全部数据求和
    np.prod(array,axis=0) / array.prod(axis=0) :axis=0时纵向求乘积,axis=1时横向求乘积,无axis时全部数据求乘积
    类似的还有min(),max(),mean(),std(),sqrt(),exp(),abs(),square(),sign()【计算正负号个数】,ceil()【大于等于该值的最小整数】,floor()【小于等于该值的最大整数】,…
  • array.cumsum() / array.cumprod():获得所有元素的累计和/累计积
    在这里插入图片描述
  • np.dot():
# 1维的时候是内积计算——np.dot() 不同维度是无法进行的
print(np.dot(x, y))  # 20

# 2维的时候就是矩阵运算
x.shape = 1, 2
y.shape = 2, 1
print(np.dot(x, y))  # [[20]]
print(np.dot(y, x))
'''
[[10 10]
 [10 10]]
'''
  • 逻辑运算
x = np.array([1, 1, 1, 4])
y = np.array([1, 1, 1, 1])
print(x == y)  # [ True  True  True False]
print(np.logical_and(x == 1, y == 1))  # [ True  True  True False]
print(np.logical_or(x == 1, y == 1))  # [ True  True  True  True]
  • 截断操作:
    array.clip(a,b):设置最小值和最大值【例子:信用分】
    在这里插入图片描述
  • 四舍五入
    array.round():括号里为1时,四舍五入且保留1位小数
  • 排序
    np.sort(array, axis=0):如果axis=0为对每一列进行排序,若为1则是对每一行进行排序,若没写则默认为对每一行排序
  • 指定规则排序
    np.lexsort(b, a):先按照a排序,再按照b排序,输出结果索引
du_array = np.array([[1, 0, 6], [1, 7, 0], [2, 3, 1], [2, 4, 0]])
index = np.lexsort([-1 * du_array[:, 0], du_array[:, 2]])  # sort by du_array[:,2],then by -1*du_array[:,0]
print(index)  # [3 1 2 0]
du_array = du_array[index]
print(du_array)
'''
[[2 4 0]
 [1 7 0]
 [2 3 1]
 [1 0 6]]
'''

numpy.linalg运算

该部分在做金融应用中经常用到。

  • np.linalg.inv():矩阵求逆
  • np.linalg.solve():矩阵方程求解

ndarray数组结构/大小/维度查询&数据类型查询转换&数组形状转换:

  • array.shape / np.shape(array)
  • array.size() / np.size(array)
  • array.ndim
  • array.dtype
  • array.astype(new type):常用类型为int8,float64,bool,object,string_,…
  • array.reshape(a,b):转换成(a, b)格式的数组
  • array[np.newaxis, :] / array[np.newaxis, :, np.newaxis] / …:增加维度
  • np.expand_dims(a,axis=):即在相应的axis轴上扩展维度
  • np.append(arr, values, axis=):
    1)无axis:arr,values都将先展平成一维数组,然后沿着axis=0的方向在arr后添加values
    2)axis=0:沿着arr行方向添加values
    3)axis=1:沿着arr列方向添加values
  • array.squeeze():压缩,把没用的轴剔除掉【从数组的形状中删除单维度条目,即把shape中为1的维度去掉
  • array.flatten():多维数组拉平成一维【array.flatten()[2] = 10, array对应位置元素不改变
  • array.ravel():多维数组拉平成一维【array.ravel()[2] = 10, array对应位置元素改变
  • array.transpose() / array.T:转置,不改变原数据
  • np.random.shuffle(array) : 常用于分类模型训练

数组连接

  • np.concatenate((a, b), axis=1):为0时行拼接;为1时列拼接
  • np.vstack((a, b)) / np.hstack((a, b)):v为行拼接;h为列拼接
a = np.array([[123, 456, 678], [3214, 456, 134]])
b = np.array([[1235, 3124, 432], [343, 13, 134]])
c = np.concatenate((a, b))  # 默认为行拼接
print(c, np.concatenate((a, b), axis=1))  # axis=1为列拼接
'''
[[ 123  456  678]
 [3214  456  134]
 [1235 3124  432]
 [ 343   13  134]]
 [[ 123  456  678 1235 3124  432]
 [3214  456  134  343   13  134]]
'''

排序操作

在这里插入图片描述
在这里插入图片描述

插值排序

在这里插入图片描述

ndarray索引与切片

索引从0开始,左闭右开

  • 一维形式与列表索引一致
  • 多维/矩阵形式:
print(array1)
#array([[ 1,  2,  3],
#      [ 4, 10,  6],
#      [ 7,  8,  9]])
print(array1[1])  # array([ 4, 10,  6])
print(array[:,1])  # array([ 2, 10,  8])
print(array[0,0:2])  # array([1, 2])
  • 布尔类型索引
array1 = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
array2 = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1], dtype=bool)
print(np.array(array1)[array2])  # [60 70 80 90]
array3 = array1 > 45
print(array3)  # [False False False False False  True  True  True  True  True]
print(np.array(array1)[array3])  # [50 60 70 80 90]
print(np.where(array1 > 40))  # (array([5, 6, 7, 8, 9], dtype=int64),)
print(array1[np.where(array1 > 40)])  # [50 60 70 80 90]
  • 确定索引位置
    array.argmin(axis=0):axis=0时纵向最小值的索引,axis=1时横向最小值的索引,无axis时全部数据最小值的索引
    array.argmax(axis=0):axis=0时纵向最大值的索引,axis=1时横向最大值的索引,无axis时全部数据最大值的索引
  • 对数据进行排列的索引
    np.argsort(array)
array = np.array([[1.5, 1.3, 7.5], [5.6, 7.8, 1.2]])
print(np.argsort(array)) 
'''
[[1 0 2]
 [2 0 1]]
'''

条件查询:np.where()

  • 一个参数时:np.where(condition) ,根据条件输出布尔类型数组
  • 多个参数时:np.where(condition1&condition2, x, y),根据条件判断,符合条件输出x,不符合条件输出y;但condition和x和y必须形状相同。

数组集合运算

  • np.unique(array):用于找出数组中的唯一值并返回已排序的结果
  • np.intersect1d(x,y):计算xy交集,并返回有序结果
  • np.union1d(x,y):计算xy并集,并返回有序结果
  • np.in1d(x,y):得到一个x是否包含于y的布尔类型数组
  • np.setdiff1d(x,y):集合的差,即元素在x中而不在y中
  • np.sexor1d(x,y):异或,集合的对称差,即存在一个数组但不同时存在于两个数组的元素
  • np.inld(array, [, , , ]):测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组
    在这里插入图片描述

ndarray数据赋值

若想赋值与array1相同的array2但不改变array1,就需要array2 = array1.copy()
如果使用的是array2 = array1, 则改变array2中的某元素,array1随之对应改变

  • 对于ndarray结构来说,里面所有的元素必须是同一类型的
    如果不是的话,会自动的向下进行转换
    int/float/字符串
    在这里插入图片描述

保存&读取数组

  • np.savetxt(‘d4.txt’, array) : 保存科学计数法
  • np.savetxt(‘d4.txt’, array, fmt=’%d’, delimiter=’,’) : 保存int型
  • np.savetxt(‘d4.txt’, array, fmt=’%.2f’, delimiter=’,’) : 保存小数点两位
  • np.save(‘array.npy’, array):注意:.npy后缀是保存数组
  • np.savez(‘array.npz’, a=arr1, b=arr2):将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可
  • np.load(‘array.npy’) :读取数组
  • result = np.load(‘array.npz’) :读取
    result[‘b’] >>> arr2

学习路上,持续更新哇~

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值