预备知识:
array:一组相关变量能够一个接一个地存储在计算机存储器的一块连续区域内的表示方法称为数组array。
数据分析 numpy
numpy是Python语言的一个拓展程序库,支持大量的维度数组与矩阵运算,而且numpy针对于数组运算提供大量的数学函数库。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算:
1、一个强大的N维数组对象 ndarray
2、广播功能函数
3、整合 C/C++/Fortran 代码的工具
4、线性代数、傅里叶变换、随机数生成等功能
1、Ndarray对象
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
N维数组对象Ndarray,由一系列同类型数据的集合。
Ndarray是用于存放同类型元素的多维数组,每个元素在内存中都有相同大小的存储区域。
ndarray的数组属性,
1、维数称为秩rank。二位数组相当于两个一维数组,而每一个一维数组的每个元素又可以当做一个一维数组,所以一维数组就是numpy的轴,第一个轴相当于底层数组,第二轴相当于底层数组里的数组。而轴的数量-----秩rank,就是数组的维数!!!轴axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作???
2、ndarray.itemsize,以字节的形式返回数组中每一个元素的大小。
3、ndarray.flags: 返回 ndarray 对象的内存信息,包含以下属性:
属性 | 描述 |
---|---|
C_CONTIGUOUS (C) | 数据是在一个单一的C风格的连续段中 |
F_CONTIGUOUS (F) | 数据是在一个单一的Fortran风格的连续段中 |
OWNDATA (O) | 数组拥有它所使用的内存或从另一个对象中借用它 |
WRITEABLE (W) | 数据区域可以被写入,将该值设置为 False,则数据为只读 |
ALIGNED (A) | 数据和所有元素都适当地对齐到硬件上 |
UPDATEIFCOPY (U) | 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新 |
ndarray的组成:
-
一个指向数据(内存或内存映射文件中的一块数据)的指针。
-
数据类型或 dtype,描述在数组中的固定大小值的格子。数据类型对象 (dtype)可以通过规定:数据的类型(整数,浮点数或者 Python 对象);数据的大小(例如, 整数使用多少个字节存储);数据的字节顺序(小端法或大端法);在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分;如果数据类型是子数组,它的形状和数据类型,从而描述数组在存储区域是如何使用!
-
一个表示数组形状(shape)的元组,表示各维度大小的元组。(reshape可以将一维数组调整为指定维度的数组,而shape不可以。当数组维度大于1时,两者功能类似)
-
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
属性 | 说明 |
---|---|
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 | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
字符 | 对应类型 |
---|---|
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-)字符串 |
U | Unicode |
V | 原始数据 (void) |
2、ndarray创建数组
1、numpy.empty,数组元素为随机值,因为它们未初始化 2、numpy.zeros,创建指定大小的数组,数组元素以 0 来填充 3、numpy.ones,创建指定形状的数组,数组元素以 1 来填充。 4、numpy.asarray,numpy.asarray类似 numpy.array,但 numpy.asarray 只有三个参数,比 numpy.array 少两个 5、numpy.frombuffer,numpy.frombuffer 用于实现动态数组 6、numpy.fromiter,numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。 7、从一定范围值获取array
1、numpy.empty,数组元素为随机值,因为它们未初始化
numpy.empty(shape, dtype = float, order = 'C')
2、numpy.zeros,创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order = 'C')
import numpy as np # 默认为浮点数 x = np.zeros(5) print(x) # 设置类型为整数 y = np.zeros((5,), dtype = np.int) print(y) # 自定义类型!!!输出结果:[[(0, 0) (0, 0)] [(0, 0) (0, 0)]]!!! z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')]) print(z)
3、numpy.ones,创建指定形状的数组,数组元素以 1 来填充。实例和上面的类似。
4、numpy.asarray,numpy.asarray类似 numpy.array,但 numpy.asarray 只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)
5、numpy.frombuffer,numpy.frombuffer 用于实现动态数组。numpy.frombuffer 接受 buffer 输入参数,buffer 可以是任何对象,以流的形式读入转化成 ndarray 对象。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
6、numpy.fromiter,numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。
numpy.fromiter(iterable, dtype, count=-1)
import numpy as np # 使用 range 函数创建列表对象 list=range(5) it=iter(list) # 使用迭代器创建 ndarray x=np.fromiter(it, dtype=float) print(x)
7、从一定范围值获取array
numpy.arange,numpy.arange(start, stop, step, dtype)
numpy.linspace(等差数列),np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
numpy.logspace(等比数列),np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None):base 参数意思是取对数的时候 log 的下标
import numpy as np # 默认底数是 10,1.0就是10,2.0就是100!!! a = np.logspace(1.0, 2.0, num = 10) print (a)