>

LoeiJe

:D 获取中...

何以解忧?唯有暴富

numpy学习笔记

numpy学习笔记
数组类型

numpy 类型

具体如下:
基本类型 可用的Numpy类型 备注
布尔型 bool 占1个字节
整型 int8, int16, int32, int64, int128, int intC语言中的 long 一样大
无符号整型 uint8, uint16, uint32, uint64, uint128, uint uintC语言中的 unsigned long 一样大
浮点数 float16, float32, float64, float, longfloat 默认为双精度 float64longfloat 精度大小与系统有关
复数 complex64, complex128, complex, longcomplex 默认为 complex128 ,即实部虚部都为双精度
字符串 string, unicode 可以使用 dtype=S4 表示一个4字节字符串的数组
对象 object 数组中可以使用任意值
Records void
时间 datetime64, timedelta64

任意类型的数组:

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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 2019-10-23
# numpy 学习笔记
# icenaive
# 参考: https://github.com/lijin-THU/notes-python
# 仅供个人学习使用
#
# 4. 数组类型
import numpy as np

# 复数数组

a = np.array([1+1j, 2, 3, 4])
print(a)

# python 可以自动判断数组的类型
print(a.dtype)

# 对于复数 可以查看它的实部和虚部
print(a.real, a.imag)

# 还可以设置它们的值
a.imag = [1, 2, 3, 4]
print(a)

# 查看复共轭
print(a.conj())

# 这些属性也可以用在浮点数和整数上,但是 对于虚部来说是只读的
# 无法修改 会报错

# 构建数组的时候,会根据传入的内容,自动判断类型
a = np.array([0, 1.0, 2, 3])
print(a, a.dtype) # 对于浮点数,默认为双精度
# 查看所用字节 (8 bytes * 4)
print(a.nbytes)

# 也开始在构建的时候指定数据类型
a = np.array([0, 1.0, 2, 3], dtype=int)
print(a.dtype,a, a.nbytes)


# 此外还可以指定有无符号, 例如无符号整数
a = np.array([0, 1.0, 2, 3], dtype=np.uint8)
print(a, a.dtype, a.nbytes)
# uint8 只使用一个字节,表示0-255的整数

# 还可以从二进制数据中读取
# 先写入二进制数据
a = np.array([102, 111, 212], dtype = np.uint8)
a.tofile('./foo.dat')

# 从数据中读入
# 需要指定类型
b = np.frombuffer(b'foo', dtype = np.uint8)
print(b)

# 清理数据文件
import os
os.remove('foo.dat')

# 0-255 的值可以用来表示ASCII码 可以使用ord函数来查看字符的ASCII码
print(ord('f'))

a = np.array([1, 1.2, 'hello', [10, 20, 30]],
dtype=object) # object 类型: 数组中可以使用任意值
print(a)
# 乘法
print(a * 2)

# 类型转换
a = np.array([1.5, -3],
dtype=np.float32)
print(a)

# asarray 函数
# asarray 不会修改原来数组的值
print(np.asarray(a, dtype=np.int)) # 需要将结果返回给a 修改
print(a)

# 当类型相同时,asarray并不会产生新的对象,而是使用同一个引用
b = np.asarray(a, dtype=np.float32)
print(b is a)

# 这么做的好处在与,asarray 不仅可以作用于数组,还可以将其他类型转化为数组。

# 有些时候为了保证我们的输入值是数组,我们需要将其使用 asarray 转化,
# 当它已经是数组的时候,并不会产生新的对象,这样保证了效率。

# astype 方法
# astype 方法会返回一个新的数组, astype 也不会改变原来数组的值
# 另外,astype 总是返回原来数组的一份复制,即使转换的类型是相同的:
print(a.astype(np.int32))
print(a)

# view 方法
a = np.array((1, 2, 3, 4), dtype=np.int32)
print(a)
# view 会将 a 在内存中的表示看成是 uint8 进行解析:
b = a.view(np.uint8)
print(a, b)
# 修改a 也会修改b 因为共用一块内存
a[0] = 2 ** 13
print(a, b)