numpy

本文仅记录了一些自己会使用到的知识,若没有帮到您,我感到很抱歉!

一、numpy数组基础

1. 数组–声明

t1 = np.array([1, 2, 3]) # [1 2 3]
t2 = np.array(range(10, 22), dtype="float").reshape(3, 4)
t3 = np.arange(10, 22, dtype="float").reshape(3, 4)

注:range和arange默认步长均为1;dtype指定数组中的数据类型;reshape指定维度

2. 数组–合并

a = [1, 3, 5]
b = [2, 4, 6, 7]

(1)+

print(a+b)

(2)extend

a.extend(b)
print(a)

(3)列表表达式

c = [a, b]
d = [i for _c in c for i in _c]
print(d)

3. 数据类型–转换

t1 = np.array(range(1, 5), dtype="float") # 指定声明float型数据:[1. 2. 3. 4.]
print(type(t1)) # t1本身的数据类型:<class 'numpy.ndarray'>
print(t1.dtype) # t1中所存放数据的数据类型:float64
t2 = t1.astype("int") # 调整数据类型为int:[1 2 3 4]

4. 数组维度–转换

t1 = np.arange(12) # 声明一维数组:(12, )
t2 = t1.reshape(3, 4) # 转变成二维数组:(1, 4)
t3 = t1.reshape(2, 2, 3) # 转变成三维数组:(2, 2, 3)
t4 = t3.flatten() # 返回一个折叠成一维的数组,但是该函数只能适用于numpy对象

二、numpy数组计算

1. 数组和数值的计算

t1 = np.array([random.randint(1, 10) for i in range(12)]).reshape(3, 4)
t2 = t1 + 2 # 数组中的每个元素均会加2

2. 数组和数组的计算

(1)两个数组形状相同

t1 = np.array([random.randint(1, 10) for i in range(12)]).reshape(3, 4)
t2 = np.array([random.randint(1, 10) for i in range(12)]).reshape(3, 4)
t3 = t1 * t2

注:形状相同时,对应位置元素直接进行计算,对二维、三维数组均适用
(2)两个数组形状不同

# 二维数组
t1 = np.array([random.randint(1, 10) for i in range(12)]).reshape(2,6) # 生成12个随机数,形状改为2 * 6
t2 = np.array([random.randint(1, 10) for i in range(2)]).reshape(2, 1) # 生成2个随机数,形状为 2 * 1
t3 = np.array([random.randint(1, 10) for i in range(6)]) # 生成6个随机数
t4 = t1 + t2 # 列方向上的元素个数均为2,故可进行计算
t5 = t1 * t3 # 行方向上的元素个数均为6,故可进行计算
#三维数组---借助立体图思考 x = [0, 2], y = [0, 3], z = [0, 4]
t1 = np.array([random.randint(1, 10) for i in range(24)]).reshape(2, 3, 4)
t2 = np.array([random.randint(1, 10) for i in range(8)]).reshape(2, 1, 4)
t3 = np.array([random.randint(1, 10) for i in range(12)]).reshape(3, 4) # 也可以写成(1, 3, 4)
t4 = np.array([random.randint(1, 10) for i in range(6)]).reshape(2, 3, 1)
t5 = t1 + t2 # 往y方向看,形状为2 * 4,此时y = 1方可进行计算
t6 = t1 * t3 # 往x方向看,形状为3 * 4,此时x = 1方可进行计算
t7 = t1 - t4 # 往z方向看,形状为2 * 3,此时z = 1方可进行计算

三、numpy处理本地数据

1. 读取本地csv文件

file_path = "./data.csv"
data = np.loadtxt(file_path, delimiter=",", dtype="int")

2. 数组内行列交换

data1[[1, 3], :] = data1[[3, 1], :] # 交换1,3两行
data1[:, [1, 3]] = data1[:, [3, 1]] # 交换1,3两列

3. 数组间拼接

print(np.vstack((data1, data2))) # 竖直拼接
print(np.hstack((data1, data2))) # 水平拼接

注:竖直(水平)拼接须保持两个数组列(行)数一致

4. 切片和索引

(1)取行

print(data[2]) # 取某一行
print(data[1:3]) # 取连续多行
print(data[[2, 8, 10]]) # 取不连续的多行

(2)取列

print(data[:, 1]) # 取某一列
print(data[:,1:3]) # 取连续的多列
print(data[:, [1, 3]]) # 取不连续的多列

(3)取行和列

print(data[2, 3]) # 取一个点:(2, 3)
print(data[[0, 1], [0, 2]]) # 取不相邻的多个点:(0, 0)和(1, 2)
print(data[2:5, [0, 2]]) # 取2行到4行,0列和2列的元素

5. 数据修改

data[:, [1, 3]] = 0 # 给(行)列中所有元素赋值
data[data < 10] = 3 # 将数值小于10的值改为3
print(np.where(data < 10, 3, 20)) # 将数值小于10的改为3,反之改为20
print(data.clip(10, 18)) # 将数值小于10的替换为10, 大于18的替换为18

6. 常用统计函数

print(data.sum(axis=0)) # 求和
print(data.mean(axis=0)) # 求均值
print(np.median(data, axis=0)) # 中值
print(data.max(axis=0)) # 最大值
print(data.min(axis=0)) # 最小值
print(np.ptp(data, axis=0)) # 极差:最大值-最小值
print(data.std(axis=0)) # 标准差

注:axis=0:指按0轴方向,对每列数据进行计算;axis=1则对每行数据进行计算

四、补充

1. 保留有效数字

# 保留有效数字
t1 = [random.random() for i in range(10)] # 随机生成10个[0,1]之间的小数
t2 = np.round(t1, 2) # 将t1中的数据保留两位小数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值