第六节 numpy的常用属性和方法

import numpy as np

# 二维数组
t1 = np.array([range(10),range(10,20)])
print(t1)

# 三维数组
t2 = np.array([[range(10),range(10,20)],[range(10),range(10,20)]])
print(t2)

# 查看数组的形状,打印(2, 10),表示2行10列,打印(2, 2, 10),表示两块,每块都是2行10列
print(t1.shape)
print(t2.shape)

# reshape改变数组的形状,将二维降为一维,20是数组元素的总个数,flatten只能将二维转换成一维
print(t1.reshape((20,)))
print(t1.flatten())

# 数组转置,swapaxes交换轴,原来是0和1
t1.transpose()
print(t1.T)
t1.swapaxes(1, 0)

# 数组的索引和切片
print(t1[1])  # 取一行
print(t1[1:3])  # 取连续多行
print(t1[[1, 3, 4]])  # 取不连续多行

print(t1[:,1])  # 取一列
print(t1[:,1:3])  # 取连续多列
print(t1[:,[1,3,5]])  # 取不连续多列

print(t1[1:3,2:4])  # 取交叉区域的数据
print(t1[[1,2],[3,4]])  # 取不相邻的数据

# 数组中值的修改
t1[[1,2],[3,4]] = 0
t1[1:3,2:4] = 1
t1[t1<5] = 18  # 将t1中小于5的元素都改成18,t1<5返回的是true和false数组
np.where(t1<10, 0, 10)  # 将t1中小于10的替换成0 ,否则都替换成10
t1.clip(10, 18)  # 将t1中小于10的替换成10,大于18的替换成18

# 数组的拼接
np.vstack((t1, t2))  # 竖直拼接,t1在上
np.hstack(t1, t2)  # 水平拼接,t1左

# 数组的交互
t1[[1, 2], :] = t1[[2, 1], :]   # 行交换
t1[:, [1, 2]] = t1[:, [2, 1]]   # 列交换

# 数据的分割,跟拼接刚好相反
np.vsplit(t1, 2)  # 竖直分割,从第二行开始将t1分为两部分
np.hsplit(t1, 2)  # 水平分割,从第二列开始将t1分为两部分

# 快速创建全为0或者1的数组
np.zeros(2, 3)  # 两行三列
np.ones(3, 4)  # 三行四列

# 创建一个对角线为1的正方形数组
np.eye(10)  # 10行10列,对角线元素为1,其他全为0

# 获取行列最大值或者最小值的位置
np.argmin(t1, axis=0)  # 获取每行最小值的位置,返回的是代表位置下标的元组
np.argmin(t1, axis=1)  # # 获取每列最小值的位置,返回的是代表位置下标的元组

# numpy中的随机数
np.random.rand(2, 3)  # 随机生成2行3列的均匀分布的数组,浮点数,0-1
np.random.randn(2, 5) # 随机生成2行3列的标准正态分布的数组,浮点数
np.random.randint(10, 20, (3, 5))  # 随机生成10-20之间的3行5列的整数数组
np.random.uniform(10, 20 ,(3, 5)) # 随机生成2行3列的均匀分布的数组,整数数,10-20
np.random.normal(loc=1, scale=2, size=(3, 5))  # 从指定正态分布中随机抽取样本,loc是分布中心,scale是标准差,3行5列数组
np.random.seed(5)  # 随机数种子,5是给定的种子值,因为生成的是伪随机数,所以通过设置相同的随机种子,可以每次生成相同的随机数,和其他随机数方法配合使用

# numpy中的copy和view
a = t1  # a和t1会相互影响
a = t1[:]  # a和t1会相互影响
a = t1.copy()  # a和t1互不影响

# numpy中的nan,nan和任何值进行计算返回值都是nan
print(np.nan == np.nan)  # 返回false,可以利用这个特性来计算数组中的nan有多少个
np.count_nonzero(t1)  # 计算数组t1中有非0元素的个数
np.count_nonzero(t1!=t1)  # 返回t1数组中nan的个数
np.isnan(t1)  # 返回和t1对应的布尔类型的数组,元素是nan,则对应位置为true
np.count_nonzero(np.isnan(t1))  # 返回t1数组中nan的个数



# 数组和数字计算,每个元素都进行
# 数组和形状一样的数字进行计算,也是对应位置一一进行计算
# 当数组和不同形状的数组进行计算时,某一维度一样且另一维度是0,才能进行计算,否则会报错
np.sum(t1, axis=0)  # 计算t1中每一列的和,返回包含每一列和的数组,axis没有这个参数则计算整个数组的和
t1.sum(axis=0)  # 计算t1中每一行的和,返回包含每一行和的数组
t1.mean(axis=0)  # 均值
np.median(t1, axis=0)  # 中值,这个方法只能由np调用
t1.max()
t1.min()
np.ptp(t1, axis=0)  # 极值,即最大值和最小值之差,这个方法只能由np调用
t1.std(axis=1)  # 标准差



# 读入数据,dtype指定数据类型,skiprows指定跳过多少行,一般跳过表头,usecols指定索引列时第几列,unpack数组转置
file_path = r'E:\anacondatest\PythonData\高校信息.csv'
np.loadtxt(file_path, delimiter=",", dtype='', skiprows=1, usecols=1, unpack=False)

 

posted @ 2020-03-24 19:50  kog_maw  阅读(133)  评论(0编辑  收藏  举报