NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

Ndarray

可以和python一样切片,但是type必须相同

>>> a=np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> a=np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a=np.array([1,2,3,4,5],ndmin=2)
>>> a
array([[1, 2, 3, 4, 5]])
>>> a=np.array([1,2,3],dtype=complex)
>>> a
array([1.+0.j, 2.+0.j, 3.+0.j])

构造函数

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度

order描述的是数组在内存中的构建方式,C表示的是C语言方案,而F则是FORTRAN。

arrange

和py的range一样

>>> np.arange(24)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])
>>> np.arange(1,24)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23])
>>> np.arange(1,24,2)
array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23])

数据类型

名称 描述
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 位浮点数(实数部分和虚数部分)

dtype

除了可以用来查询type以外,还可以用来复制type和创建type

>>> np.dtype(np.int32)
dtype('int32')
>>> np.dtype('i4')
dtype('int32')
>>> np.dtype('<i4')
dtype('int32')
>>> np.dtype([('age',np.int8)])
dtype([('age', 'i1')])
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
>>> dt = np.dtype([('age',np.int8)])
>>> a = np.array([(10,),(20,),(30,)], dtype = dt)
>>> a
array([(10,), (20,), (30,)], dtype=[('age', 'i1')])
>>> np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
dtype([('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
>>> np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]))
array([(b'abc', 21, 50.), (b'xyz', 18, 75.)],
      dtype=[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
>>> student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])

内建类型

字符 对应类型
b 布尔型
i (有符号) 整型
u 无符号整型 integer
f 浮点型
c 复数浮点型
m timedelta(时间间隔)
M datetime(日期时间)
O (Python) 对象
S, a (byte-)字符串
U Unicode
V 原始数据 (void)

数组 array

属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.ndim
2
>>> a.shape
(2, 3)
>>> b=a.reshape(3,2)
>>> b
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a.itemsize
4
>>> a.flags                # 查看内存信息
  C_CONTIGUOUS : True      # 数据是在一个单一的C风格的连续段中
  F_CONTIGUOUS : False     # 数据是在一个单一的Fortran风格的连续段中
  OWNDATA : True           # 数组拥有它所使用的内存或从另一个对象中借用它
  WRITEABLE : True         # 数据区域可以被写入,将该值设置为 False,则数据为只读
  ALIGNED : True           # 数据和所有元素都适当地对齐到硬件上
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False     # 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

使用numpy.asarray(a, dtype = None, order = None)可以从列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组来创建一个array。

slice

除了直接切片以外,还可以调用切片方法,创造出一个实例化的切片方案

>>> import numpy as np
>>> a=np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> s=slice(2,7,1)
>>> s
slice(2, 7, 1)
>>> a[s]
array([2, 3, 4, 5, 6])

线性代数

https://www.runoob.com/numpy/numpy-matrix.html

绘图

https://www.runoob.com/numpy/numpy-matplotlib.html