数组的索引和切片
首先导入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))