一.环境
本人使用的是Anaconda,免费的 Python 发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署。支持 Linux, Windows 和 Mac 系统。
二.ndarray对象
组成部分:
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或 dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组,表示各维度大小的元组。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
三.numpy.array()函数
格式:numpy.array(object,dtype,copy,order,subok,ndmin)
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
四.array()函数代码举例
- import numpy as np
- a = np.array([1,2,3])#一维数组
- print(a)
-
- b = np.array([[1,2],[3,4]])#二维数组
- print(b)
import numpy as np 或import numpy
这两种都需要在函数前加.
from numpy import *
不需要添加前缀
相同:两者都是导入numpy库的函数,变量,对象等
- import numpy as np
- a = np.array([[1,2,3],[4,5,6],[1,2,3]],ndmin = 4)#最小维度
- print(a)
-
-
- [[[[1 2 3]
- [4 5 6]
- [1 2 3]]]]
dtype的值可以是很多:
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()函数
格式:numpy.dtype(object,align,copy)
dtype()代码举例
- import numpy as np
- a = np.dtype(np.int64)
- print(a)
-
-
- int64
创建数据类型代码举例
- import numpy as np
-
- dt = np.dtype([('age',np.int8)])
- a = np.array([(10,),(20,),(30,)])
- print(a)
- a = np.array([(10),(20),(30)])
- print(a)
- a = np.array([(10,),(20),(30)],dtype = dt)
- print(a)
-
- [[10]
- [20]
- [30]]
- [10 20 30]
- [(10,) (20,) (30,)]
六.array的属性
也就是用一些函数求一些数组自身的特征,比如数组的维数,数组的大小。
ndim()用于求数组维数
- import numpy as np
- a = np.arange(24)
- print(a.ndim)
- a = a.reshape(2,4,3)
- print(a.ndim)
-
-
- 1
- 3
shape()函数用于求数组的行列数或改变行列数
- import numpy as np
- a = np.array([[2,3],[4,5]])
- print(a.shape)
- a.shape=(1,4)
- print(a)
- print(a.shape)
-
- (2, 2)
- [[2 3 4 5]]
- (1, 4)
-
reshape()也可用于调整数组行列数
itemsize()可以返回元素大小
- import numpy as np
- a = np.array([1,2,3],dtype =float)
- print(a.itemsize)
-
- 8
flags()返回内存使用情况
- import numpy as np
- a = np.array([1,2,3],dtype =float)
- print(a.flags)
-
- C_CONTIGUOUS : True
- F_CONTIGUOUS : True
- OWNDATA : True
- WRITEABLE : True
- ALIGNED : True
- WRITEBACKIFCOPY : False
- UPDATEIFCOPY : False
属性 | 描述 |
---|---|
C_CONTIGUOUS (C) | 数据是在一个单一的C风格的连续段中 |
F_CONTIGUOUS (F) | 数据是在一个单一的Fortran风格的连续段中 |
OWNDATA (O) | 数组拥有它所使用的内存或从另一个对象中借用它 |
WRITEABLE (W) | 数据区域可以被写入,将该值设置为 False,则数据为只读 |
ALIGNED (A) | 数据和所有元素都适当地对齐到硬件上 |
UPDATEIFCOPY (U) | 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新 |
含义如上
七.快速创建数组的函数
empty()方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
格式如下:numpy.empty(shape, dtype = float, order = 'C')
- import numpy as np
- a = np.empty([2,3],dtype = float)
- print(a)
-
- [[0. 0. 0.]
- [0. 0. 0.]]
zeros()全零矩阵
- import numpy as np
- a = np.zeros((2,3),dtype = int)
- print(a)
- b = np.zeros(5)
- print(b)
-
- [[0 0 0]
- [0 0 0]]
- [0. 0. 0. 0. 0.]
ones()全1矩阵
- import numpy as np
- a = np.ones((2,3),dtype = int)
- print(a)
- b = np.ones(5)
- print(b)
-
- [[1 1 1]
- [1 1 1]]
- [1. 1. 1. 1. 1.]
八.从已有数组创建数组
asarray()函数可以将列表、元组、等转化为矩阵数组
- import numpy as np
- a = [(1,2,3),(2,3,4)]
- s = np.asarray(a)
- print(s)
-
- [[1 2 3]
- [2 3 4]]
frombuffer实现动态数组
格式:numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
参数 | 描述 |
---|---|
buffer | 可以是任意对象,会以流的形式读入。 |
dtype | 返回数组的数据类型,可选 |
count | 读取的数据数量,默认为-1,读取所有数据。 |
offset | 读取的起始位置,默认为0。 |
- import numpy as np
- a = b'hello cat'
- s = np.frombuffer(a,dtype='S1')
- print(s)
-
- [b'h' b'e' b'l' b'l' b'o' b' ' b'c' b'a' b't']
至于为什么要加b,希望评论区能给一个好的解释。
fromiter()方法从可迭代对象中建立 ndarray 对象,返回一维数组
格式numpy.fromiter(iterable, dtype, count=-1)
- import numpy as np
- list = range(5)
- it = iter(list)
- x = np.fromiter(it,dtype = int)
- print(x)
-
-
- [0 1 2 3 4]