# -*-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)
numpy 学习2-读取csv数据和数组的相关操作
最新推荐文章于 2024-07-09 17:49:13 发布
该博客详细介绍了NumPy库中数组的各种操作,包括数组的转置(transpose、T和swapaxes方法)、拼接(vstack和hstack函数)、切片、平均拆分、行或列交换、数组赋值、构造特定数组以及获取最大值和最小值的位置。同时展示了如何从CSV文件加载数据并进行后续操作。
摘要由CSDN通过智能技术生成