梨视频热点

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

你的位置: 梨视频热点 > 热点短视频 >

NumPy矩阵运算:数据操作基础

发布日期:2024-11-01 02:46    点击次数:165

数据的归一化

数据的归一化是将数组的数据一齐映射到一个特定区间进行惩处,在数据分析中,一般是将数组的一齐数据映射到区间[0,1]。

例1鸢尾属植物数据集的归一化

鸢尾属植物数据集包括了三类不同的鸢尾属植物,永诀是Iris Setosa、Iris Versicolour和Iris Virginica,每类收罗了50个样本,每个样本阵势了花萼长度、花萼宽度、花瓣长度、花瓣宽度,单元是厘米,该数据集共有150个样本。

数据集以文本方式存储,每行1个样本,共150行,每行有5列,前4列阵势了样本的4个特征,第5列是鸢尾属植物称呼。

举例底下的数据行:

5.1,3.5,1.4,0.2,Iris-setosa

4.9,3.0,1.4,0.2,Iris-setosa

…………

6.2,3.4,5.4,2.3,Iris-virginica

5.9,3.0,5.1,1.8,Iris-virginica

从给出的数据集不错看出,特征数据的数值规模基本不在区间[0,1]内,若要对该数据集进行数据分析,需要对特征数据进行归一化惩处。底下将数据集的第1列作念归一化惩处。

# 导入numpy库

import numpy as np

# 次第进口

if __name__ == '__main__':

# 从数据集文献读取第1列特征数据

data = np.genfromtxt('iris.data',delimiter=',',dchk=1&type='float', usecols=[0])

# 赢得数据集的最大值和最小值

max, min = data.max(), data.min()

# max - min当作基数对数据归一化惩处

result = (data - min)/(max - min)

print(result)

代码解读

numpy库的genfromtxt()函数从文本文献读取数据集,第1个参数为文本文献的旅途,援救土产货和蚁合文献;第2个参数为为列数据字段间的分隔符;第3个参数为读入的数据类型;第4个参数建设读取的列数据。

max和min为读取数据集的最大值和最小值,并通过max-min当作基数进行数据的归一化惩处。

计较数据的联系扫数

联系扫数是斟酌两个变量之间线性联系进度的量,关于鸢尾属植物数据集来说,联系扫数响应了每两列数据之间的线性联系进度。举例:花萼长度和花瓣长度的联系性、花萼宽度和花瓣宽度的联系性等。

联系扫数一般在-1~1之间,该值为正数时为正联系,为负数时为负联系,为0时莫得联系性。该值越接近于1,诠释两个变量之间正线性联系越强,该值越接近于-1,诠释负线性联系越强。

因变量值随自变量值的增大(减小)而减小(增大),在这种情况下,因变量和自变量的联系扫数为负值,即负联系。

例2 计较鸢尾属植物数据集花萼长度和花瓣长度的联系扫数

# 导入numpy库

import numpy as np

# 次第进口

if __name__ == '__main__':

# 从数据集文献读取第1列和第3特征数据

data = np.genfromtxt('iris.data',delimiter=',',dchk=1&type='float', usecols=[0,2])

# 索求第1列数据

col1 = data[::,0]

# 索求第3列数据

col2 = data[::,1]

# 计较两列数据的联系扫数

r = np.corrcoef(col1,col2)

print(r)

代码解读

numpy库的corrcoef函数计较两列数据的联系扫数,输出后果是两列数据的联系扫数矩阵:

[[1. 0.87175416]

[0.87175416 1. ]]

联系扫数为1的是列本人的联系扫数,花萼长度和花瓣长度的联系扫数为0.87175416。

数据分类统计

无意对数据进行分类统计詈骂常有效的,分类统计不错响应总体里面各部分之间的隔离和相互关系。举例:对鸢尾属植物数据集的花萼按长度区间进行分类。

例3 对鸢尾属植物数据集的花萼数据按长度区间分类

花萼长度区间规模:small(<3),medium(3~5),large(>5)

# 导入numpy库

import numpy as np

# 次第进口

if __name__ == '__main__':

# 读取数据集

data = np.genfromtxt('iris.data',delimiter=',',dchk=1&type='float')

# 索求数据集第3列数据

third_data = data[:,2]

# 界说存储分类数据的列表

samll,medium,large = [],[],[]

# 界说分类区间

bins = [0, 3, 5, 10]

# 调用numpy库的digitize函数对数据分类

petal_length = np.digitize(third_data.astype('float'), bins)

for n in range(third_data.size):

if bins[petal_length[n]-1] >= 0 and bins[petal_length[n]] <= 3:

samll.append(third_data[n])

if bins[petal_length[n]-1] >= 3 and bins[petal_length[n]] <= 5:

medium.append(third_data[n])

if bins[petal_length[n]-1] >= 5 and bins[petal_length[n]] <= 10:

large.append(third_data[n])

print(samll)

print(medium)

print(large)

代码解读

Numpy模块的digitize()函数对数值数据按照给定的数值规模分类,函数的第1个参数是待分类的数组,第2个参数是分类区间数组。函数复返分类数组每个元素所属的分类区间数组的区间索引。

digitize()函数的界说如下:

digitize(x, bins, right=False)

若bins是单调递加的,那么bins[i-1]<=x<bins[i];若是bins是单调递减的,那么bins[i-1]>x>=bins[i]。若x中的值超出了bins的鸿沟,则会阐明需要复返0或len(bins)。若是right为True,则bins右边是闭区间,索引i使得bin[i-1]<x<=bin[i]或bin[i-1]>=x>bin[i],且bins永诀单调递加或递减。

计较向量间的欧式距离

欧式距离也称为欧几里得距离或欧几里得度量,是欧几里得空间中两点间直线距离,多用于数据分析的聚类或相同度计较。

在二维坐标系中,两点间的欧式距离为:

其中(x1,y1)和(x2,y2)是二维坐标系两点的坐标。

在三维坐标系中,两点间的欧式距离为:

其中(x1,y1,z1)和(x2,y2,z2)是三维坐标系两点的坐标。

在n维坐标系中,两点间的欧式距离为:

其中(x1,x2,……xn)和(y1,y2,……,yn)是n维坐标系的两点坐标。

n维坐标系的点不错用向量来暗示,举例三维坐标系的两点p1和p2不错暗示为向量:

p1 = np.array([[3,1,2]])

p2 = np.array([[6,5,7]])

例4 计较两个向量间的距离

# 导入numpy库

import numpy as np

# 次第进口

if __name__ == '__main__':

# 三维坐标系p1点

p1 = np.array([[3,1,2]])

# 三维坐标系p2点

p2 = np.array([[6,5,7]])

# 计较两点间L2范数(欧式距离)

dist = np.linalg.norm(p2-p1)

print(dist)

代码解读

Numpy库linalg模块的norm()函数计较向量或矩阵的范数,norm()函数的第1个参数或是向量或是矩阵,第2个参数指定范数类型,默许是L2范数(即欧式距离)。

找出向量的局部极大值

向量的局部极大值是指在向量规模内,双方被较少许值的重量包围的重量。

举例向量:

a = np.array([1, 3, 7, 1, 2, 6, 0, 1])

向量a的局部极大值为7和6两个重量,7和6的周围王人是小于该值的重量。

例5 找出向量的局部极大值

# 导入numpy库

import numpy as np

# 次第进口

if __name__ == '__main__':

# 界说向量v

v = np.array([1, 3, 7, 1, 2, 6, 0, 1])

# 计较向量v相邻重量的差值

difference = np.diff(v)

# 复返difference重量的正负号

# x>0:1 x=0:0 x<0:-1,x为difference的重量值

difference_sign = np.sign(difference)

# 再次计较difference_sign相邻重量的差值

doublediff = np.diff(difference_sign)

# 复返doublediff重量值为-2的索引向量

peak_locations = np.where(doublediff == -2)

# peak_locations是元组类型,第1个元素是索引向量

# 索引向量作念加1操作

# 因为索引向量的重量指向向量v局部极大值重量的相邻重量

peak_locations = peak_locations[0] + 1

print(peak_locations)



栏目分类
热点资讯