Ndarray 多维数组 :
numpy数组是一个多维的数组对象,称为ndarray ,具有矢量算数运 算能力和复杂多维广播能力,并且执行速度快,节省空间
导入: import numpy as np
属性:ndim 维度个数
Shape 维度大小
Dtype 数据类型 数据类型有int float bool
Size 数据大小
创建
函数 说明
array 输入数据转换为ndarray对象,可以是python元组、列表或其他序列类型。可以自动识别dtype,或者手动指定类型
arange 类似range,返回ndarray的一维序列数组
ones 创建全1数组,默认float类型。ones_like创建一个类型输入数组的全1数组
zeros 与ones相同,创建全0数组
empty 初始化数组,不是总是返回全0,有时返回的是未初始的随机值(内存里的随机值)。
linspace 线性关系等分的一个数列
random.randint 指定范围指定形状的随机矩阵
random.randn 标准正太分布
random.random 0到1 的指定形状的矩阵
方法:
type() 测类型 参数需要测得数据类型
astype() 转换adarray内部数据类型 参数需要转换的类型
reshape() 重构形状 参数形状(a,b,c,…)a
b
c*…需要等于size
Ndarray的基本操作:
1索引
一维数组用法同列表一样
二维的例如a=array([[94, 21, 71, 32],
[32, 20, 13, 5],
[66, 31, 18, 57],
[12, 49, 85, 53]])
可以通过a[2][1]取2行1列的数据 也可以通过a[2,1]来取
多维照葫芦画瓢
2切片
一维数组切片同列表一样
二维例如
([[43, 68, 94, 1],
[77, 82, 98, 61],
[31, 60, 30, 12],
[81, 0, 42, 2]])
Nd[:2]表示取前2行 nd[:2,:2]代表取前2行的前2列
多维同理
数据翻转nd1[::-1]
隔三个取一个nd1[::3]
倒着隔三个取一个nd1[::-3]
每一列的元素不变 每一行的元素倒过来nd[::1,::-1]
3级联
就是把两个数据放到一起
1.np.concatenate() 级联需要注意的点:
2.级联的参数是列表:一定要加中括号或小括号,列表里面放的是ndarray
3.维度必须相同
4.形状相符
5.【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
6.可通过axis参数改变级联的方向 axis=1表示竖着级联行数会增加 axis=0表示行着级联 列数会增加
7.np.hstack水平级联 多行变成一行二维会变一维
8. np.vstack垂直级联 一行变多行 一维变二维
4切分
np.vsplit(nd,[a,b])将一列切开 横着切 a,b表示刀的位置 下图是【1,3】切
np.hsplit 将一行切开 竖着切 下图是【2,4】切
np.split axis = 0 和vsplit一样的效果 axis = 1 和 hspilt一样的效果
5副本
数据分析的copy 不分深和浅, 就是简单的复制而已 复制品的改变不会影响数据源
6聚合
np.sum 求和 axis=0每一列求和 axis=1每一行求和
np.prod 乘积
np.mean 平均值
np.std 标准差
np.var 方差
np.min 最小值
np.max 最大值
np.argmin 最小值得下标索引
np.argmax 最大值得下标索引
np.median 中位数
np.any 任一个 nan返回flase 可判断行或列或整体
np.all 所有
np.power 幂运算
7ndarray的矩阵操作
±*/ np.add np.subtract np.multiply np.divide
矩阵相乘np.dot(nd1,nd2)
两个ndarray 在进行相乘的时候, 一个数据的行和一个数据 的列必须相同
【重要】ndarray广播机制的两条规则
- 规则一:为缺失的维度补1
- 规则二:假定缺失元素用已有值填充
8排序
冒泡排序
def sort_nd(nd):
for i in range(nd.size):
for j in range(i, nd.size):
if nd[i] > nd[j]:
nd[i] , nd[j] = nd[j], nd[i]
return nd
精简版冒泡排序
def sort2_nd(nd):
for i in range(nd.size):
#当i = 0 index_min =np.argmin(nd[0:])+0 index_min = 0
#当i = 1 index_min = np.argmin(nd[1:])+1 index_min = 1
#当i = 2 inde_min = np.argmin(nd[2:])+2
index_min = np.argmin(nd[i:])+ i
nd[i],nd[index_min] = nd[index_min], nd[i]
return nd
快速排序
np.sort()与ndarray.sort()都可以,但有区别:
- np.sort()不改变输入
- ndarray.sort()本地处理,不占用空间,但改变输入
部分排序
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
- 当k为正时,我们想要得到最小的k个数
- 当k为负时,我们想要得到最大的k个数