欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【Numpy学习笔记2】数据读取、标准数据创建、随机数产生、速度提高

时间:2023-04-25
读取数据

主要内容:

加载常用数据格式,
np.loadtxt(), np.fromstring()保存数据
np.savetxt()
np.save(), np.savez(), np.savez_compressed()

numpy不能读取excel文件,追求存储速度用二进制文件方式,要能够查看,储存为txt或csv格式

import numpy as np#读入.csv文件data = np.loadtxt("data.csv", delimiter=",",skiprows = 1,dtype =np.int16)#csv格式的文件分隔符都是逗号,跳过第一行文字描述print(data)#读入字符串数据row_string = "20131, 10, 67, 20132, 11, 88, 20133, 12, 98, 20134, 8, 100, 20135, 9, 75, 20136, 12, 78"data = np.fromstring(row_string, dtype=np.int16, sep=",")data = data.reshape(6, 3) #读入数据后,用reshape可以重新组织数据的格式print(data)#保存数据为.csv文件np.savetxt("saved_data.csv", data, delimiter=",", fmt='%.4f') #保存为二进制文件,文件结尾为.npynp.save("save_data.npy", data)np.savez("save_data.npz",train=data , test=data ) #用train和test来作为索引标签,在一个文件下存储两个array#np.savez_compressed("data/save_data_compressed.npz", train=train_data, test=test_data) #用上面的函数进行压缩,减少空间#加载npz_data = np.load("save_data.npz")print("train = ", npz_data["train"])

标准数据创建

主要内容:

创建统一数据
np.zeros(), np.ones(), np.full()
np.zeros_like(), np.ones_like(), np.full_like()创建规则数据
np.arange(), np.linspace()快速创建再添加值
np.empty(), np.empty_like()

import numpy as npb = np.array([[0,1,2,3],[4,5,6,7]])a = b.reshape((4,2)) #也可以写成shape((4,-1)),-1表示自动计算,也可以写成reshape(4,2)b[1][0] = 8877 # reshape是共享内存的,a也被修改#快速生成数列,np.arange(起,终,间隔)print("np.arange(0,1,0.2)= ",np.arange(0,1,0.2))#linspace 等差数列print("np.linspace(0,1,10)= ",np.linspace(0,1,10)) #(0,1)之间内插10个值,等差,endpoint设定是否包含结尾值#等比数列print("np.logspace(0,2,10)= ",np.logspace(0,2,10)) #10^0-10^2内生成等比数列,base设定基底,默认是10#全0数组print(np.zeros((3,3), np.int0))#全1数组print(np.ones((3,3), np.int0))#元素全等print(np.full((3,3), 5))#先生成内存,担不存储数据,后面再将数据进行替换,速度快print(np.empty((3,4),dtype= np.int16))

随机数的产生

import numpy as np#np.random.rand() 是一种最方便去生成带 shape 的 [0, 1) 之间取值的 Arrayprint(np.random.rand(2,3))#标准正态print(np.random.randn(2,3))#随机整数print(np.random.randint(low = -1, high = 20, size = 10,dtype = np.int16))#从给定的array里面生成data = np.array([2,1,3,4,6])print("选一个:", np.random.choice(data))print("选多个:", np.random.choice(data, size=3))print("不重复地选多个(不放回):", np.random.choice(data, size=3, replace=False))print("带权重地选择:", np.random.choice(data, size=10, p=[0,0,0,0.2,0.8]))#洗牌功能,先copy再洗牌data_copy =np.copy(data)np.random.shuffle(data)print(data_copy,"n===============n",data)#np.random.permutation() 产生随机数,但不影响原来的数据,且可以处理多维数据# (均值,方差,size)print("正态分布:", np.random.normal(1, 0.2, 10))# (最低,最高,size)print("均匀分布:", np.random.uniform(-1, 1, 10))#当我们把种子固定的时候(用一个数字),同一个种子(数字)产生的随机序列就会一样。np.random.seed(1)#表示1号序列print(np.random.rand(2,3)) #随机数不会改变print(np.random.randint(2,3))

速度提高

Numpy Array 和 Python List 内部结构差别

赋值的时候是名字绑定,相当于给数据开了另一个窗口,只有一份原始数据,尽量用切片去访问数据,相当于View,而避免使用copy,

import numpy as npa = np.arange(1, 7).reshape((3,2))a_view = a[:2]a_copy = a[:2].copy()a_copy[1,1] = 0print("在 copy 上修改数据,不会影响源数据:n", a)a_view[1,1] = 0print("在 view 上修改数据,会影响'窗里'的源数据:n", a)

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。