读取数据
主要内容:
- 加载常用数据格式,
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')
#保存为二进制文件,文件结尾为.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"])
标准数据创建
主要内容:
- 创建统一数据
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 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)