python3 numpy详解

基础操作

import numpy as np

# np创建数组
a = np.array([1,2,3])
print(a)
print(type(a))

a2 = np.array(range(10))
print(a2)
print(type(a2))
# numpy特有的方法 生成一个数组类型 与array(range())一致
a3 = np.arange(0,12,2)
print(a3)
print(type(a3))
# dtype是当前数组里边存放的数字的类型
print(a3.dtype)
# 手动指定数值类型
a4 = np.array(range(1,4),dtype="float32")
a4 = np.array([1,0,1,1,5],dtype=bool)
print(a4)
print(a4.dtype)
# 调整数字类型
a5 = a4.astype("int32")
print(a5.dtype)

读取文件(csv)

import numpy as np

us_file_path = "./data/US_video_data_numbers.csv"
uk_file_path = "./data/GB_video_data_numbers.csv"
# 默认情况下np.loadtxt 不会对csv文件进行按照  ,  分割
#需要指定分隔符  delimiter=","
# 默认使用科学计数法 dtype 指定加载出来的数据类型
# 默认情况下unpack为false 指定为True之后行列互换  即矩阵转置矩阵
t1 = np.loadtxt(us_file_path,delimiter=",",dtype=int,unpack=True)
print(t1)
  • 矩阵转置方法
# reshape中传入的参数在官方文档中传入的是元组 所以建议传入元组
t2 = np.arange(24).reshape((4,6))
print(t2)
# 转置方法1
print(t2.transpose())
# 转置方法2  T是一个属性
print(t2.T)
# 转置方法3  转换1轴 和 0 轴
# 注意 轴0 1 2 ... 分别是在定义矩阵时的参数shape(3,2,5,...)
print(t2.swapaxes(1,0))
  • 取值赋值索引
import numpy as np

us_file_path = "./data/US_video_data_numbers.csv"
uk_file_path = "./data/GB_video_data_numbers.csv"
# 默认情况下np.loadtxt 不会对csv文件进行按照  ,  分割
#需要指定分隔符  delimiter=","
# 默认使用科学计数法 dtype 指定加载出来的数据类型
# 默认情况下unpack为false 指定为True之后行列互换  即矩阵转置矩阵
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int")

# 取数据的行
print(t1[2])
# 取连续多行数据
print("\n")
print(t1[2:5])
# 取不连续多行 注意有两个方括号
print("\n")
print(t1[[2,8,56]])
# 取列
print("\n")
print(t1[1,:])#每一列都要
print(t1[:,0])
# 取连续多列
print("\n")
print(t1[:,2:])
# 取不连续多列
print("\n")
print(t1[:,[2,3,3]])
# 取多行多列
print("\n")
print(t1[2,3])
print("\n")
# 取第3行到第五行  第二列 到 第四列
print(t1[2:5,1:4])
# 取多個不相邻的点
print("\n")
# print(t1[[0,3],[0,1,2]])

# 更多索引方法
a = np.arange(24).reshape(4,6)
a[a>10] = 0
print(a)

#numpy中的三元运算符
# 把小于10的赋值100 否则赋值300
np.where(a<=10,100,300)
# 剪枝
# 把小于10的换为10  大于14的换成14 (等于无所谓)
print(a.clip(10,14))

# 强行赋值nan
# nan是浮点类型 所以需要把interger强行转化为float

a2 = a.astype(float)
a2[3,3] = np.nan
print(a2) 
  • 数组的拼接
import numpy as np
# 拼接两组数据并且在最后一行记录国家信息
us_file_path = "./data/US_video_data_numbers.csv"
uk_file_path = "./data/GB_video_data_numbers.csv"
# 默认情况下np.loadtxt 不会对csv文件进行按照  ,  分割
#需要指定分隔符  delimiter=","
# 默认使用科学计数法 dtype 指定加载出来的数据类型
# 默认情况下unpack为false 指定为True之后行列互换  即矩阵转置矩阵
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2 = np.loadtxt(uk_file_path,delimiter=",",dtype="int")

# 构造全为 0 的数据
zeros_data = np.zeros((t1.shape[0],1)).astype(int)
ones_data  = np.ones((t2.shape[0],1)).astype(int)
# 分别添加一列数据 在最后边 水平拼接 使得数据更多行
us_data = np.hstack((t1,zeros_data))
uk_data = np.hstack((t2,ones_data))
# 拼接us uk  竖直拼接  使得数据更多行
final_data = np.vstack((us_data,uk_data))
print(final_data)

numpy 中的其他好使的方法

import numpy as np

# 生成只有对角线是 1 的矩阵
t1 = np.eye(10)
t1[3,4] = 9
print(t1)
# 求每一列的最大值
max = np.argmax(t1,axis=0)
print(max)
# 生成随机数
# 如果不使用种子 每次得到的数字都是不一样的  而使用了种子
# 每次得到的随机结果都是一样的
np.random.seed(10)
t = np.random.randint(0,20,(3,4))
print(t)
  • NAN说明
import numpy as np
# 两个nan不相等
print(np.nan == np.nan)
# 判断数组中nan的数量
t2 = np.arange(20).reshape((4,5)).astype(float)
print(np.count_nonzero(t2))
t2[3,3] = np.nan
print('\n')
print(np.count_nonzero(t2!=t2))
#nan和任何值计算都是nan
# 要注意在要计算之前一般应该判断矩阵中是否含有nan
#将缺失的值替换为中值或者平均值

猜你喜欢

转载自blog.csdn.net/qq_41009846/article/details/85057767