【Python数据分析学习笔记-2】NumPy的使用-数组的索引和切片、数组的运算

数组的索引和切片

首先导入numpy模块

import numpy as np
arr_1=np.arange(12)
print(arr_1[2],arr_1[-1])
arr_1[11]=12306
print(arr_1)

# 切片操作
arr_1_1=arr_1[3:8]
arr_1_1[:]=99
print(arr_1_1)
print(arr_1)
print('\n')

# 数组的切片和索引返回都是原始数组的视图

#如果要的并非视图而是要复制数据,可以通过copy方法来实现

arr_1_2=arr_1[3:8].copy()
arr_1_2[:]=100
print(arr_1)

注意:数组的切片和索引返回都是原始数组的视图;
如果要的并非视图而是要复制数据,可以通过copy方法来实现
运行结果:
在这里插入图片描述

# 二维数组的索引

arr_2=np.arange(18).reshape(3,6)
print(arr_2[2])
# 以下方法功能相同
print(arr_2[2][1])
print(arr_2[2,1])

arr_2=np.arange(18).reshape(3,2,3)
old=arr_2[0].copy()
arr_2[0]=100

print(arr_2)
print('\n')
arr_2[0]=old
print(arr_2)

print(arr_2[1,1])
print(arr_2[1,1,1])

在这里插入图片描述

# 数组的切片
arr_3=np.array([1,3,5,7,9])
print(arr_3[1:3])
arr_4=np.arange(20).reshape(5,4)
print(arr_4[3:])

# 还可以这样索引,逗号前面表示行索引,逗号后面表示列索引

arr_5=np.arange(14).reshape(7,2)
print('arr_5=\n',arr_5)
print('arr_5[:,1]=',arr_5[:,1])

print('arr_5[1,:]=',arr_5[1,:])

# 布尔值索引

arr_6=np.arange(20).reshape(10,2)
print(arr_6)
arr_7=np.array(['刘邦','司马炎','朱元璋','王莽','刘秀','赵光义','刘邦','李世民','朱元璋','玄烨'])
print(arr_6[arr_7=='刘邦'])
print(arr_6[(arr_7=='刘邦' )|(arr_7=='朱元璋')])  # '|'(或)
print(arr_6[arr_7=='刘邦',1:])
print('\n')
arr_6[arr_7=='刘邦']=220
print(arr_6)

# 花式索引

arr_8=np.arange(20).reshape(4,5)
print(arr_8)
print('\n')
arr_8_1=arr_8[[1,3,2]]
print(arr_8_1)
arr_8_2=arr_8_1[:,[1,4,2]]
print(arr_8_2)
print('\n')
print(arr_8[np.ix_([1,3,2],[1,4,2])])

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

函数名 用法
abs 求绝对值
square 求平方
add 用于两个数组的相加
minimun 计算元素的最小值
modf 用于返回数组元素的整数和小数部分
# 数组的运算


arr_9=np.array([1,3,2,5])
arr_9*=15
print(arr_9)
arr_9**=2
print(arr_9)
# 方法
# abs函数求绝对值
# square函数求平方
# add函数用于两个数组的相加
# minimun函数可以计算元素的最小值
# modf函数用于返回数组元素的整数和小数部分
arr_10=np.array([-1.2,-3,234.234,-32.314,97])
arr_11=np.array([1,2,3,4,5])
print(np.abs(arr_10))
print(arr_10)
print(np.square(arr_10))
print(np.minimum(arr_10,arr_11))
print(np.modf(arr_10))
print(np.add(arr_10,arr_11))

在这里插入图片描述

# 条件逻辑运算

arr_11_1=np.array([1,2,3,4])
arr_11_2=np.array([5,6,7,8])
arr_11_3=np.array([True,False,True,False])
arr_11_4=[ i if k else j for i,j,k in zip(arr_11_1,arr_11_2,arr_11_3)]
print(arr_11_4)
# 也可以使用where函数来处理
print('\n')
arr_11_5=np.where(arr_11_3,arr_11_1,arr_11_2)
print(arr_11_5)

arr_11_6=np.random.randn(3,3)
print(arr_11_6)
arr_11_7=np.where(arr_11_6>0,20,2)
print(arr_11_7)
print('\n')
# 嵌套where函数
arr_11_8=np.where(arr_11_6>0.5,1,np.where(arr_11_6>0,20,10))
print(arr_11_8)

在这里插入图片描述

函数名 用法
sum 用于求和
mean 用于求算术平均数
std 用于求标椎差
var 用于求方差
min、max 分别用于求最小值和最大值
argmin、argmax 分别用于求最大值和最小值的索引
cumsum 用于求所以元素的累计和
cumprod 用于求所有元素的累计积
# 统计运算
# sum函数用于求和
# mean函数用于求算术平均数
# std函数用于求标椎差

# var函数用于求方差
# min函数、max函数分别用于求最小值和最大值
# argmin函数、argmax函数分别用于求最大值和最小值的索引
# cumsum函数用于求所以元素的累计和
# cumprod函数用于求所有元素的累计积

arr_12_1=np.arange(20).reshape(4,5)
print(arr_12_1)
print(arr_12_1.sum())
print(arr_12_1.mean())
print(arr_12_1.std())
print(arr_12_1.sum(axis=1))
print(arr_12_1.sum(axis=0))
print(arr_12_1.cumsum(axis=0)) # 参数为0代表代表列的累计和
print(arr_12_1.cumprod(1)) # 参数为1代表行的累计积

在这里插入图片描述

# 布尔型数值运算
# 对于布尔型数组,其布尔值会被强制转换成1(True)和0(False)
arr_13_1=np.random.randn(10)
print(arr_13_1)
print((arr_13_1>0).sum())

# any方法用于测试数组中是否存在一个或多个True
# all方法用于检查数组中所有值是否为True
arr_13_2=np.array([True,True,False,True,False])
print(arr_13_2.any())
print(arr_13_2.all())

在这里插入图片描述

# 排序
# sort方法
arr_13_3=np.random.randn(20).reshape(4,5)
print(arr_13_3)
arr_13_3.sort(0)
print(arr_13_3)

在这里插入图片描述

# 集合运算
# unique方法求数组中的唯一值
arr_14_1=np.array([1,2,3,56,6,1,2,3])
print(np.unique(arr_14_1))
# 注意:对唯一值进行了排序

# inld方法用于测试几个数组中是否包含相同的值,返回一个布尔值数组
arr_14_2=np.array([1,2,3,4,5])
print(np.in1d(arr_14_2,[3,4]))

# intersect1d(x,y)  求公共元素
# unionld(x,y) 并集
# setdiff1d(x,y) 集合的差
# setxor1d(x,y) 交集取反

# 线性代数
# dot函数用于矩阵的乘法
arr_15_1=np.arange(10).reshape(2,5)
arr_15_2=np.arange(10).reshape(5,2)
print(arr_15_1)
print(arr_15_2)
print(np.dot(arr_15_1,arr_15_2))

# det函数用于求矩阵的行列式
from numpy.linalg import det
arr_15_3=np.arange(16).reshape(4,4)
print(det(arr_15_3))

在这里插入图片描述

发布了51 篇原创文章 · 获赞 299 · 访问量 9198

猜你喜欢

转载自blog.csdn.net/qq_45404396/article/details/104233484
今日推荐