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

本文详细介绍了如何使用 NumPy 进行数据读取、保存、创建及操作。内容包括 np.loadtxt() 和 np.fromstring() 读取数据,np.savetxt()、np.save() 及 np.savez_compressed() 保存数据,以及创建标准数据和随机数的方法。此外,还讨论了内存管理和效率提升的技巧,如视图与复制的区别。
摘要由CSDN通过智能技术生成

读取数据

主要内容:

  1. 加载常用数据格式,
    np.loadtxt(), np.fromstring()
  2. 保存数据
    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') 

#保存为二进制文件,文件结尾为.npy
np.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"])

标准数据创建

主要内容:

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

b = 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) 之间取值的 Array
print(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 np

a = np.arange(1, 7).reshape((3,2))
a_view = a[:2]
a_copy = a[:2].copy()

a_copy[1,1] = 0
print("在 copy 上修改数据,不会影响源数据:\n", a)

a_view[1,1] = 0
print("在 view 上修改数据,会影响'窗里'的源数据:\n", a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值