>

LoeiJe

:D 获取中...

何以解忧?唯有暴富

numpy学习笔记

numpy学习笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 2019-10-25
# numpy 学习笔记
# icenaive
# 参考: https://github.com/lijin-THU/notes-python
# 仅供个人学习使用
#
# 19. 数组读写
## 读取%%writefile myfile.txt
# 2.1 2.3 3.2 1.3 3.1
# 6.1 3.1 4.2 2.3 1.8
# 为了生成数组,我们首先将数据转化成一个列表组成的列表,再将这个列表转换为数组:
import numpy as np
# data = []

# with open('myfile.txt') as f:
# # 每次读一行
# for line in f:
# fileds = line.split()
# row_data = [float(x) for x in fileds]
# data.append(row_data)

# data = np.array(data)
# print(data)

# loadtxt
# data = np.loadtxt('myfile.txt')
# print(data)

# 设置分割符
# data = np.loadtxt('myfile.txt', delimiter=',')
# print(data)

# loadtxt(fname, dtype=<type 'float'>,
# comments = '#', delimiter = None,
# converters = None, skiprows = 0,
# usecols = None, unpack = False, ndmin = 0)
# `loadtxt` 有很多可选参数,其中 `delimiter` 就是刚才用到的分隔符参数。
# `skiprows` 参数表示忽略开头的行数,可以用来读写含有标题的文本
# data = np.loadtxt('myfile.txt', skiprows=1)
# print(data)
# genfromtxt 能处理更复杂的情况,但是效率低

# # 其他特性
# data = np.loadtxt('myfile.txt',
# skiprows=2, # 忽略第一行
# dtype=np.int, # 数组类型
# delimiter=',', # 逗号分割
# usecols=(0, 1, 2, 4), # 指定使用哪几列数据
# comments='%' # 百分号为注释符
# )
# # print(data)
# import datetime
# def date_converter(s):
# # return datetime.datetime.strptime(s.decode('ascii'), '%Y-%m-%d')
# return datetime.datetime.strptime(s.decode('ascii'), '%Y-%m-%d').timetuple()
# data = np.loadtxt('myfile.txt', dtype = np.object, converters = {0: date_converter, # 返回格式是bytes 需要将其转换为string 使用的decode(’ascii‘)
# 1: np.float, 2: np.float})
# print(data)


# 将数组写入文件
# savetxt 可以将数组写入文件,默认使用科学计数法的形式保存:

data = np.array([[1, 2],
[3, 4]])

np.savetxt('out.txt', data)
with open('out.txt') as f:
for line in f:
print(line)

data = np.array([[1, 2],
[3, 4]])

np.savetxt('out.txt', data, fmt="%d") # 保存为整数
with open('out.txt') as f:
for line in f:
print(line)

data = np.array([[1, 2],
[3, 4]])

np.savetxt('out.csv', data, fmt="%.2f", delimiter=',') # 保存为2位小数的浮点数,用逗号分隔
data = np.array([[1+1j, 2],
[3, 4]])

np.savetxt('out.txt', data, fmt="%.2f", delimiter=',') # 保存为2位小数的浮点数,用逗号分隔
with open('out.txt') as f:
for line in f:
print(line)


# numpy 二进制
# save, savez,savez_compressed
a = np.array([[1.0, 2.0], [3.0, 4.0]])

fname = 'afile.npy'
np.save(fname, a)
aa = np.load(fname)
print(aa)

# 二进制与文本
a = np.arange(10000.)
print(a)
np.savetxt('a.txt', a)
np.save('a.npy', a)

import os
print(os.stat('a.npy').st_size)
# 二进制大约是文本的1/3

# 保存多个数组

a = np.array([[1.0, 2.0],
[3.0, 4.0]])
b = np.arange(1000)

np.savez('data.npz', a = a, b = b)

data = np.load('data.npz')
print(data.keys())
print(data['a'],data['b'])

# 压缩文件
a = np.arange(20000)
np.savez_compressed('a2.npz', a = a)
print(os.stat("a2.npz").st_size)
# 数据比较混乱时,压缩效果会变差