numpy 学习2-读取csv数据和数组的相关操作

该博客详细介绍了NumPy库中数组的各种操作,包括数组的转置(transpose、T和swapaxes方法)、拼接(vstack和hstack函数)、切片、平均拆分、行或列交换、数组赋值、构造特定数组以及获取最大值和最小值的位置。同时展示了如何从CSV文件加载数据并进行后续操作。
摘要由CSDN通过智能技术生成
# -*-coding: UTF-8 -*-
"""
1-功能描述:
1. 数组的转置的三种方法:
f1_2 = f1.transpose()
f1_3 = f1.T
f1_4 = f1.swapaxes(1, 0)  交换轴

2. 数组的拼接:
np.vstack((m1, m2))  # 垂直拼接(列数必须相同),谁在前面拼接后就会在上边
np.hstack((m1, m2))  # 水平拼接(行数必须相同),谁在前面拼接后就会在左边

3. 数组的切片:

4. 数组的平均拆分:
np.vsplit(m1, 2)  # 垂直方向将数组拆分为2个大小相等的数组组成的列表(数值的行数除以拆分的数必须能除尽)
np.hsplit(m4, 2)  # 水平直方向将数组拆分为2个大小相等的数组组成的列表(数值的列数除以拆分的数必须能除尽)

5. 数组交换行或列:

6. 数组的赋值:

7.构造全为0或者1,对角为1的数组:

8. 获取每行或者列的最大值和最小值在什么位置,返回一维数组:

9. m1[b]: b为和m1 shape相同的bool数组,m1[b]返回True位置,在m1中所对应的数值组成的一维数组。m1[b]=8将会把所有True位置,对应在m1中的位置变为8
"""
import numpy as np

csv1_path = "./csv_files/CSV1.csv"
csv2_path = "./csv_files/CSV2.csv"

m1 = np.loadtxt(fname=csv1_path,
                delimiter=",",  # 数据以什么符号分割,CSV为","分割
                dtype="int32",  # 指定读取后的数据类型
                skiprows=0,  # 要跳过前多少行数,0表示不跳过,比如设置为2表示跳过前两行
                usecols=(0, 1, 2, 3),  # 要读那几列,0为第一列
                unpack=False,  # 是否要转置
                ndmin=0,  # 指定最小维度
                encoding=None,  # 指定编码类型
                max_rows=None  # 最多读取多少行
                )
m2 = np.loadtxt(fname=csv2_path, delimiter=",", dtype="int32")
print(m1.shape, m2.shape)

m1_1 = np.loadtxt(fname=csv1_path, delimiter=",", dtype="int32", unpack=True)  # unpack=True时,相当于将矩阵转置(沿对角线旋转180度,列变成行)
m1_2 = m1.transpose()  # 数组的转置
m1_3 = m1.T  # 数组的转置
m1_4 = m1.swapaxes(1, 0)  # 数组的转置

# print(m1)
# print("*" * 100)
# print(m2)

# 数组的拼接
m3 = np.vstack((m1, m2))  # 垂直拼接(列数必须相同),谁在前面拼接后就会在上边
# print("*" * 100)
# print(m3)
m4 = np.hstack((m1, m2))  # 水平拼接(行数必须相同),谁在前面拼接后就会在左边
# print("*" * 100)
# print(m4)

# 数组的切片
# print(m1[1, :])  # 取第二行里的所有元素组成一个1维数组
# print(m1[:, 1])  # 取第二列里的所有元素组成一个1维数组
# print(m1[[1], :])  # 取第二行
# print(m1[:, [1]])  # 取第二列
# print(m1[[1, 10, 12], :])  # 取任意行,行组成的列表
# print(m1[:, [0, 2]])  # 取任意列,列组成的列表
# print(m1[1:6:2, :])  # 对行进行切片
# print(m1[:, 1:2:1])  # 对列进行切片
# print(m1[0:2:1, 1:3:1])  # 取0、1行和1、列交叉点的数据
# print(m1[[0, 1, 0], [1, 2, 0]])  # 取(0,1),(1,2)和(0,0)点的数据组成一个1维数组,和切片方式有本质区别

# 数组的平均拆分
m5 = np.vsplit(m1, 2)  # 垂直方向将数组拆分为2个大小相等的数组组成的列表(数值的行数除以拆分的数必须能除尽)
# print("*" * 100)
# print(m5)
m6 = np.hsplit(m4, 2)  # 水平直方向将数组拆分为2个大小相等的数组组成的列表(数值的列数除以拆分的数必须能除尽)
# print("*" * 100)
# print(m6)

# 交换行或者列
# m1[[0, 1], :] = m1[[1, 0], :]  # 0行和1行交换
# print(m1)
# m1[:, [0, 1]] = m1[:, [1, 0]]  # 0列和1列交换
# print(m1)

# 数组的赋值
# m1[:, 0:2] = 0  # 将0和1列所有值设置为0
# m1[m1 < 10100] = 1  # 将m1数组里所有小于10100的元素设置为1
m8 = 20 < m1  # 得到一个bool数组
m9 = m1 < 50
m10 = m8 & m9  # 如果直接写m10 = 20<m1<50的话会报错,如果写 m10 = (20<m1)<50,则是将20<m1得到的bool数组里的各个元素和50比较,没有意义肯定都是小于的
# np.where(condition, x, y)  # condition为bool数组,x为True位置的替换值,y为False位置的替换值
m7 = np.where(m10, 10, 99)  # condition=m10, 本质上m10必须是一个bool元祖,为True的位置替换为10,False的位置替换为99
m11 = np.where(m10, m1, 0)  # condition=m10, 本质上m10必须是一个bool元祖,为True的位置用m1对应的位置数据替换,False的位置用0替换
m12 = np.where(m10, m1, m2)  # condition=m10, 本质上m10必须是一个bool元祖,为True的位置用m1对应的位置数据替换,False的位置用m2对应的位置数据替换
m13 = m1.clip(min=20, max=50)  # 将小于20的值替换为20,将大于50的值替换为50
# print(m7)
# print(m8)
# print(m9)
# print(m10)
# print(m11)
# print(m12)
# print(m13)

# 构造全为0或者1,对角为1的数组
zoro_array = np.zeros(shape=(m1.shape[0], 1), dtype="int32")
one_array = np.ones(shape=(m1.shape[0], 1), dtype="int32")
eye_array = np.eye(N=8, M=8)  # N为行数,M为列数,默认M=N
# print(zoro_array)
# print(one_array)
# print(eye_array)

# 获取每行或者列的最大值和最小值在什么位置,返回一维数组
a = np.array([[1, 2, 8], [8, 1, 1], [5, 2, 8]])
a2 = np.argmin(a, axis=0)  # axis=0表示列
a3 = np.argmax(a, axis=1)  # axis=1表示行
# print(a2)
# print(a3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M_qsqsqsq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值