numpy概述
- NumPy是Python中科学计算的基础包。
- 它是⼀个Python库
- 提供多维数组对象,各种派⽣对象(如掩码数组和矩阵
- 提供对数据/数组各种操作
数据类型
- numpy的数据类型和c语⾔中的数据类型实现并不⼀样
- 可以理解对基础数据类型的优化和升级
- ⼀切为了快速处理⼤型/⼤量数据为宗旨
基础数据类型
- bool_: 布尔值,⽤⼀个字节存储
- int_: 默认整型,通常是int64/int32
- intc: 整型,通常是int32/int64
- intp: ⽤作索引的整型,通常是int32/int64
- int8/16/32/64: 整型
- uint8/16/32/64: ⽆符号整型
- float_: float64的简写
- float16: 半精度浮点型, 1bit符号, 5bits指数,10bits尾数
- float32: 单精度浮点型, 1bit符号,8bits指数,23bits尾数
- float64: 双精度浮点型, 1bit符号,11bits指数,52bits尾数
- complex_: complex128
- complex64: 复数,两个32位浮点数表示
- complex128: 复数, 由两个64位浮点数表示
简写型数据类型
- ‘b’: 字节型, np.dtype(‘b’)
- ‘i’: 有符号整型, np.dtype(‘i4’)就是⼀个 np.int32类型
- ’u’: ⽆符号整型, np.dtype(‘u8’)就是⼀个np.uint64
- ‘f’: 浮点型, np.dtype(‘f8’)
- ‘c’: 复数浮点型
- ’S’: ‘a’: 字符串, np.dtype(‘S6’)
- ‘U’: Unicode编码字符串, n’p.dtype(‘U’) 就是np.str_类型
- ‘V’: 原⽣数据, ⽐如空或者void, np.dtype(‘V’)就是np.void
其中如果出现<则表示低字节序(little endian), 同理>则表示⾼字节序
numpy数组基础
- 数组操作是numpy的核⼼
- 数组跟list类似,但数组要求内容类型必须⼀致,如果不⼀致需要进⾏强制转换,可能会损失精度。相当于是一个拓展的列表。
- 主要包括
- 数组的属性
- 数组的索引
- 数组的切分
- 数组的编写
- 数组的拼接和分裂
数组的属性
- numpy可以有多维数组
- 其属性包括:
- 维度(ndim):一维、二维、三维
- 形状(shape):通常可以理解成数组各个维度的⻓度
- ⻓度(size): 数组所存储的元素的总个数
- 数据类型(dtype): 数组的数据类型(数组要求数据必须同⼀类型)
- itemsize: 每个元素的字节⻓度
- nbytes: nbytes=itemsize x size
下面是一个数组的例子
import numpy as np
# ⽣成三个数组
a1 = np.random.randint(100, size=10) # 参数siz是⽣成数组的shape属性
a2 = np.random.randint(100, size=(4,6))
a3 = np.random.randint(100, size=(2,5,6))
# 打印出数组a1, a2, a3的属性
for a in [a1, a2, a3]:
print("dtype={}, ndim={}, shape={}, size={}, itemsize={}, nbytes={}".\
format(a.dtype, a.ndim, a.shape, a.size, a.itemsize, a.nbytes))
dtype=int32, ndim=1, shape=(10,), size=10, itemsize=4, nbytes=40
dtype=int32, ndim=2, shape=(4, 6), size=24, itemsize=4, nbytes=96
dtype=int32, ndim=3, shape=(2, 5, 6), size=60, itemsize=4, nbytes=240
几个特殊数组的创建
import numpy as np
x = np.empty(5)
print("Empty array: \n", x)
x = np.zeros(10)
print("Zeros Array: \n", x)
x = np.ones(10)
print("Ones Array: \n", x)
Empty array:
[-4.94065646e-323 0.00000000e+000 2.12199579e-314 0.00000000e+000
0.00000000e+000]
Zeros Array:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Ones Array:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
这个empty和我们理解的空稍微有所差别,他是一些及其接近0的数。而zeros则是直接都为0。
数组的索引
- 数组的索引使⽤⽅式跟list⼀样。可以是正数,负数
一维数组的索引
# ⼀位数组的索引
a1 = np.random.randint(100, size=10)
print('a1=', a1)
# 数组的索引跟list⼀致,分正负数,意义和⽤法都与list⼀致
print("a1[1]=", a1[1])
print("a1[-1]=", a1[-1])
a1={} [55 66 85 75 27 31 18 8 6 73]
a1[1]= 66
a1[-1]= 73
多维数组的索引
# 多维数组需要使⽤逗号隔开,其余使⽤⽅法和list类似
a1 = np.random.randint(100, size=(3,5))
print("a1 = ", a1)
# # 数组的索引跟list⼀致,分正负数,意义和⽤法都与list⼀致
# 得到⼆维数组的某⼀⾏
print("a1[1] = ", a1[1])
print("a1[1] = ", a1[