NumPy 学习笔记
| 编号 | 说明 | 示例 | 输出 |
|---|---|---|---|
| 1 | 一维数组 | np.array([1,2,3]) |
[1, 2, 3] |
| 2 | 二维数组 | np.array([[1, 2], [3, 4]]) |
[[1, 2] [3, 4]] |
| 3 | 可以指定维度 | np.array([1, 2, 3,4,5], ndmin = 2) |
[[1, 2, 3, 4, 5]] |
| 4 | 指定数据类型 | np.array([1, 2, 3], dtype = complex) |
[ 1.+0.j, 2.+0.j, 3.+0.j] |
为了保证数据处理的效率,NumPy支持了近20种数据类型。具体可以参见 这里。
| 名称 | 描述 |
|---|---|
| bool_ | 布尔型数据类型(True 或者 False) |
| int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
| intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
| intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
| int8 | 字节(-128 to 127) |
| int16 | 整数(-32768 to 32767) |
| int32 | 整数(-2147483648 to 2147483647) |
| int64 | 整数(-9223372036854775808 to 9223372036854775807) |
| uint8 | 无符号整数(0 to 255) |
| uint16 | 无符号整数(0 to 65535) |
| uint32 | 无符号整数(0 to 4294967295) |
| uint64 | 无符号整数(0 to 18446744073709551615) |
| float_ | float64 类型的简写 |
| float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
| float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
| float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
| complex_ | complex128 类型的简写,即 128 位复数 |
| complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
| complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
每个NumPy的对象都有以下九个重要属性。
| 编号 | 属性 | 说明 |
|---|---|---|
| 1 | ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,通常不需要用此属性。 |
| 2 | ndarray.dtype | ndarray 对象的元素类型 |
| 3 | ndarray.flags | ndarray 对象的内存信息 |
| 4 | ndarray.imag | ndarray 元素的虚部 |
| 5 | ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
| 6 | ndarray.ndim | 秩,即轴的数量或维度的数量 |
| 7 | ndarray.real | ndarray元素的实部 |
| 8 | ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
| 9 | ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
可以使用 ndarray.shape 或 np.reshape 将矩阵的维度改变。
np.array([[1,2,3],[4,5,6]]) a.shape # (2,3) b = a.reshape(3,2) 实现类似效果,产生新对象但其中数据为原数据的引用 a.shape = (3,2) print(a.shape) # (3,2) [[1 2] [3 4] [5 6]]
| 编号 | 属性 | 描述 |
|---|---|---|
| 1 | ALIGNED (A) | 数据和所有元素都适当地对齐到硬件上 |
| 2 | C_CONTIGUOUS (C) | 数据是在一个单一的C风格的连续段中 |
| 3 | F_CONTIGUOUS (F) | 数据是在一个单一的Fortran风格的连续段中 |
| 4 | OWNDATA (O) | 数组拥有它所使用的内存或从另一个对象中借用它 |
| 5 | WRITEABLE (W) | 数据区域可以被写入,将该值设置为 False,则数据为只读 |
| 6 | UPDATEIFCOPY (U) | 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新 |
从数据创建一个数列,格式为:
np.asarray(array, dtype = None, order = None)
import numpy as np # 从列表转换 x = [1,2,3] a = np.asarray(x) # a 的值: [1 2 3] # 从元组转换 x = (1,2,3) a = np.asarray(x) # a 的值: [1 2 3] # 二维转换 x = [(1,2,3),(4,5)] a = np.asarray(x) print (a) # [(1, 2, 3) (4, 5)] # 转换为指定数据类型 x = [1,2,3] a = np.asarray(x, dtype = float) print (a) # [ 1. 2. 3.]
函数 arrange 用于创建从0开始的顺序数列,其格式为:
numpy.arange(start, stop, step, dtype)
其中,start和stop为起止范围(不包括stop),step为步长,dtype为数据类型。
| 示例 | 结果 |
|---|---|
| np.arange(5) | [0 1 2 3 4] |
| np.arange(5, dtype = float) | [0. 1. 2. 3. 4.] |
| np.arange(10,20,2) | [10 12 14 16 18] |
这是非常有用的一种数列初始化的方式,强烈推荐。
https://www.runoob.com/numpy/numpy-array-from-numerical-ranges.html
用于创建等比数列,格式为:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
np.linspace(1,10,10) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] np.linspace(1,1,10) # [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] np.linspace(10, 20, 5, endpoint = False) # [10. 12. 14. 16. 18.] np.linspace(1,10,10,retstep= True) # (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0) np.linspace(1,4,4).reshape([4,1]) [[ 1.] [ 2.] [ 3.] [ 4.]]
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
import numpy as np np.logspace(1.0, 2.0, num = 10) ## [ 10. 12.91549665 16.68100537 21.5443469 27.82559402 ## 35.93813664 46.41588834 59.94842503 77.42636827 100. ] np.logspace(0,9,10,base=2) ## [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
以下是推荐的重要官网,资料很丰富:
以下是三个主要工具的源代码: