一.环境
本人使用的是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]