【数据分析常用库numpy】数据类型,数组属性及创建数组
numpy是python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也为数组运算提供大量的函数库。包含
1、一个强大的n维数组对象
2、广播功能函数
3、整合 C/C++/Fortran 代码的工具
4、线性代数、傅里叶变换、随机数生成
ndarray对象是用来存放同类型元素的多维数组
ndarray的每一个元素在内存中都有一个相同大小的区域
ndarray包含以下内容:
1、一个指向数据(内存或内存映射文件中的一块数据)的指针。
2、数据类型或 dtype,描述在数组中的固定大小值的格子。
3、一个表示数组形状(shape)的元组,表示各维度大小的元组。
4、一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
ndarray内部结构
跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
object:数组或者嵌套的数列
dtype:数组元素的数据类型,可选
copy:对象是否需要复制,默认复制
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok:默认返回与基类类型一致的数组
ndmin:指定生成数组的最小维度
numpy数据类型
数组属性。numpy中比较重要的ndarray对象属性
创建数组
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
numpy.empty(shape, dtype = float, order = 'C')
numpy.zeros 创建指定大小的数组,数组元素以 0 来填充:
numpy.zeros(shape, dtype = float, order = 'C')
numpy.ones 创建指定形状的数组,数组元素以 1 来填充:
numpy.ones(shape, dtype = None, order = 'C')
从已有的数组创建数组
numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)
一、打印一维数组
import numpy as np
from matplotlib import pyplot as plt
# 一维
a = np.array([1, 2, 3]); print(a) # [1 2 3]
二、打印等间隔数字的数组
b = np.arange(10); print(b) # [0 1 2 3 4 5 6 7 8 9]
b = np.arange(3,7,2); print(b) # [3, 5]
三、打印二维数组
c = np.array([[1, 2], [3, 4]]); print(c)
# [[1 2]
# [3 4]]
四、调整数组shape,将2行3列数组调整为3行2列
a = np.array([[1, 2, 3], [4, 5, 6]]); print(a);
# [[1 2 3]
# [4 5 6]]
a.shape = (3, 2); print(a)
# [[1 2]
# [3 4]
# [5 6]]
五、ndim:返回数组的维数
a = np.arange(24)
print(a)
print(a.ndim) # 1
六、numpy.reshape: 在不改变数据的条件下修改形状
b = a.reshape(3, 4, 2); #3代表分成三组、4代表每组4行,2代表每组2列(3*4*2=所有数据数量)
print(b)
print(b.ndim) # 3
七、空数组
x = np.empty([3, 2], dtype='i1'); print(x) # 生成3行2列的数组,数组x的元素为随机值,因为它们未初始化
#i1代表int8数据类型,i2代表int16,i4代表int32
八、含有5个0的数组,若不指定类型,则默认为float类型
x = np.zeros(5, dtype=np.int); print(x) # [0 0 0 0 0]
九、含有6个1的二维数组
x = np.ones([2, 3], dtype=int); print(x)
# [[1 1 1]
# [1 1 1]]
十、使用内置的range()函数创建列表对象
x = range(5); print(x) # range(0, 5)
十一、numpy.linspace,此函数类似于arange,在此函数中,指定了范围之间的均匀间隔数量,而不是步长
x = np.linspace(10, 20, 5); print(x) # [10. 12.5 15. 17.5 20.]
十二、# 算数运算:add加法, subtract减法, multiply乘法, divide除法, reciprocal倒数, power乘幂, mod取余 输入数组必须具有相同的形状或符合数组广播规则
a, b = [5, 6], [7, 10]
c = np.subtract(a, b); print(c) # [-2 -4]
十三、统计函数:用于从数组中给定的元素中查找最小,最大,百分标准差和方差等, amin最小值, amax最大值, ptp最大值与最小值的差, percentile计算一个多维数组的任意百分比分位数, median中位数, mean均值, average均值(可指定权重), std标准差
a = np.array([[1, 2, 3, 4, 5],[6,7,8,9,10]])
print(np.amin(a)) # 1
print(np.mean(a)) # 5.5
print(np.ptp(a)) #9
print(np.percentile(a,60)) #行列所有值的百分之60:6.3999999999999995
print(np.percentile(a,60,axis=0)) #表示在列上求,维度变为1维 [4. 5. 6. 7. 8.]
print(np.percentile(a,60,axis=1)) #表示在行上求,维度变为1维 [3.4 8.4]
print(np.percentile(a,60,axis=1,keepdims=True)) #keepdims=True表示维度不变
#[[3.4]
#[8.4]]
print(np.median(a)) #中位数5.5
print(np.average(a,axis=0,weights=[1/4,3/4])) #均值可加权平均5.5
print(np.std(a)) #标准差
参考:https://www.runoob.com/numpy/numpy-array-from-numerical-ranges.html