NumPy 学习笔记

1 基本概念

编号 说明 示例 输出
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) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

2 创建ndarray矩阵

已有数据创建数组 np.asarray(array, dtype, order)

从数据创建一个数列,格式为:
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.]

创建顺序范围数列 np.arange(start, stop, step, dtype)

函数 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, endpoint, retstep, dtype)

用于创建等比数列,格式为:

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, endpoint, base, dtype)

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.]

3 参考网站

以下是推荐的重要官网,资料很丰富:

以下是三个主要工具的源代码: