首页 > 编程知识 正文

numpy排序(新手s入门)

时间:2023-05-06 16:31:42 阅读:88415 作者:3409

导言: numpy(numericalpython的简称) )是高性能科学计算和数据分析的基础软件包,提供了矩阵运算的功能。

要处理自然语言,必须将字符(中文或其他语言)转换为向量。 即,将对文本内容的处理简化为向量空间中的向量运算。 基于向量运算,可以实现文本语义相似度、特征提取、情感分析、文本分类等功能。

作者:敏感水壶,灵巧热狗,zydyl

转载时请联系华章科学技术

NumPy具有以下主要功能:

具有ndarray——向量运算和复杂广播功能的多维数组对象。 用于快速运算数组数据的标准数学函数。 用于读写磁盘数据的工具和用于处理内存映射文件的工具。 很有用的线性代数,傅立叶变换和随机数操作。 用于整合C /C和Fortran代码的工具。 除了明显的科学用途外,NumPy还可以用作通用数据的高效多维容器,可以定义任意数据类型。 这样,NumPy就可以与各种数据库无缝、快速地集成。

提示:可以理解为,这里提到的“广播”在存在维度不同的两个数组(array )运算的情况下,可以通过低维数组复制到高维数组来参加运算(在NumPy运算的情况下,因为结构需要相同)

本文的NumPy要点如下。

在通过创建NumPy数组将NumPy中数组的维NumPy数组索引与切片NumPy数组进行比较来获取替代值NumPy数据类型转换NumPy的统计计算方法

01 创建数组

numpy中,最核心的数据结构是ndarray,即nd arrary 为了便于理解,我举一个小例子。

1 .某班学生的学号可以用一维数组表示。 数组的名称为a,a包含1、2、3、4数值类型的数据。

其中,a[0]表示第一个学生的学号1,a[1]表示第二个学生的学号2,诸如此类。

2 .一个班学生的学号和名字可以用二维数组表示。 数组名称为b

类似的东西,其中b [ 0,0 ]表示1 (学号),b [ 0,1 ]表示Tim ) )学号为1的学生的名字),类推b [ 1,0 ]表示2 )等。

借用线性代数的说法,一维数组通常称为矢量(vector ),二维数组通常称为矩阵) matrix )。

安装Anaconda后,缺省情况下,NumPy已经在库中,因此不需要其他安装。 用几个句子的简单测试来写NumPy吧:

1 )如果输入Anaconda,但未报告错误,则NumPy正常工作。

in :导入编号为

我给你解释一下这个句子。 使用import关键字部署NumPy库,并在as中使用别名np。 别名的作用是在以后编写代码时便于参考。

2 ) NumPy的阵列) ),可以直接导入向量。

vector=NP.array ([ 1,2,3,4 ]

3 ) numpy.array ) )方法还可以导入矩阵。

Matrix=NP.Array([1,‘Tim’,“2,‘令人担忧的哑铃’”,“3,‘约翰尼斯’”,“4,‘弗兰克’”) )

02 获取NumPy中数组的维度

首先,使用NumPy方法之一的arange(n )生成0到n-1的数组。 例如,如果输入NP.arange(15 ),则可以看到返回的结果为array ) [ 0,1,2,3,4,5,6,7,8,9,10,12,13,14 ]。

然后,使用NumPy的reshape(row,column方法)自动生成多行多列的array对象。

例如,我们输入的是:

a=NP.arange(15 ).reshape ) 3,5 ) #表示第3行第5列

可以看到结果:

数组([ 0,1,2,3,4 ],

[ 5,6,7,8,9 ]、

[ 10,11,12,13,14 ] )

如果有基本数据,可以从NumPy提供的shape属性中检索NumPy数组的维。

打印(a .形状) )。

知道返回的结果。 这是元组,前3个表示3行,第2个5表示5列。

(3,5 ) ) )。

03 获取本地数据

numpy的genfromtxt (可以使用方法读取本地数据集。 house-prices.csv用逗号(,)分隔,可以在Github的data目录下下载要使用的数据集。 要读取此数据集,请使用以下语句:

导入编号为

NFL=NP.genfromtxt(d:/nu

mpy/data/price.csv", delimiter=",") print(nfl)

上述代码从本地读取price.csv文件到NumPy数组对象中(ndarray),我们看一下数据集的前几行。

[[ nan nan nan nan nan nan] [ 1.00000000e+00 1.14300000e+05 2.00000000e+00 2.00000000e+00 nan nan] [ 2.00000000e+00 1.14200000e+05 4.00000000e+00 2.00000000e+00 nan nan] [ 3.00000000e+00 1.14800000e+05 3.00000000e+00 2.00000000e+00 nan nan] [ 4.00000000e+00 9.47000000e+04 3.00000000e+00 2.00000000e+00 nan nan]

暂时先不用考虑返回数据中出现的nan。

每一行的数据代表了房间的地区,是否是砖瓦结构,有多少卧室、洗手间以及价格的描述。

每个列代表了:

Home:房子的idPrice:房子的价格Bedrooms:有多少个卧室Bathroom:有多少个洗手间Brick:是否是砖房Neighborhood:地区

注意:NumPy数组中的数据必须是相同类型,比如布尔类型(bool)、整型(int),浮点型(float)以及字符串类型(string)。NumPy可以自动判断数组内的对象类型,我们可以通过NumPy数组提供的dtype属性来获取类型。

04 正确读取数据

回到之前的话题,上文发现显示出来的数据里面有数据类型na(not available)和nan(not a number),前者表示读取的数值是空的、不存在的,后者是因为数据类型转换出错。对于nan的出错,我们可以用genfromtxt()来转化数据类型。

dtype关键字要设定为‘U75’.表示每个值都是75byte的unicode。skip_header关键字可以设置为整数,这个参数可以跳过文件开头的对应的行数,然后再执行任何其他操作。import numpy as np nfl = np.genfromtxt("d:/numpy/data/price.csv", dtype='U75', skip_header = 1,delimiter=",") print(nfl)

05 NumPy数组索引

NumPy支持list一样的定位操作。举例来说:

import numpy as np matrix = np.array([[1,2,3],[20,30,40]]) print(matrix[0,1])

得到的结果是2。

上述代码中的matrix[0,1],其中0代表的是行,在NumPy中0代表起始第一个,所以取的是第一行,之后的1代表的是列,所以取的是第二列。那么最后第一行第二列就是2这个值了。

06 切片

NumPy支持list一样的切片操作。

import numpy as np matrix = np.array([ [5, 10, 15], [20, 25, 30], [35, 40, 45] ]) print(matrix[:,1]) print(matrix[:,0:2]) print(matrix[1:3,:]) print(matrix[1:3,0:2])

上述的print(matrix[:,1])语法代表选择所有的行,但是列的索引是1的数据。那么就返回10,25,40。

print(matrix[:,0:2])代表的是选取所有的行,列的索引是0和1。

print(matrix[1:3,:])代表的是选取行的索引值1和2以及所有的列。

print(matrix[1:3,0:2])代表的是选取行的索引1和2以及列的索引是0和1的所有数据。

07 数组比较

NumPy强大的地方是数组或矩阵的比较,数据比较之后会产生boolean值。

举例来说:

import numpy as np matrix = np.array([ [5, 10, 15], [20, 25, 30], [35, 40, 45] ]) m = (matrix == 25) print(m)

我们看到输出的结果为:

[[False False False] [False True False] [False False False]]

我们再来看一个比较复杂的例子:

import numpy as np matrix = np.array([ [5, 10, 15], [20, 25, 30], [35, 40, 45] ]) second_column_25 = (matrix[:,1] == 25) print(second_column_25) print(matrix[second_column_25, :])

上述代码中print(second_column_25)输出的是[False True False],首先matrix[:,1]代表的是所有的行,以及索引为1的列->[10,25,40],最后和25进行比较,得到的就是false,true,false。print(matrix[second_column_25, :])代表的是返回true值的那一行数据-> [20,25,30]。

注意:上述的例子是单个条件,NumPy也允许我们使用条件符来拼接多个条件,其中“&”代表的是“且”,“|”代表的是“或”。比如vector=np.array([5,10,11,12]),equal_to_five_and_ten =(vector == 5) & (vector == 10)返回的都是false,如果是equal_to_five_or_ten =(vector == 5)|(vector == 10)返回的是[True,True,False,False]

08 替代值

NumPy可以运用布尔值来替换值。

在数组中:

vector = numpy.array([5, 10, 15, 20]) equal_to_ten_or_five = (vector == 10) | (vector == 5) vector[equal_to_ten_or_five] = 50 print(vector) [50, 50, 15, 20]

在矩阵中:

matrix = numpy.array([ [5, 10, 15], [20, 25, 30], [35, 40, 45] ]) second_column_25 = matrix[:,1] == 25 matrix[second_column_25, 1] = 10 print(matrix) [[ 5 10 15] [20 10 30] [35 40 45]]

我们先创立数组matrix。将matrix的第二列和25比较,得到一个布尔值数组。second_column_25将matrix第二列值为25的替换为10。

替换有一个很棒的应用之处,就是替换那些空值。之前提到过NumPy中只能有一个数据类型。我们现在读取一个字符矩阵,其中有一个值为空值。其中的空值我们很有必要把它替换成其他值,比如数据的平均值或者直接把他们删除。这在大数据处理中很有必要。这里,我们演示把空值替换为“0”的操作。

import numpy as np matrix = np.array([ ['5', '10', '15'], ['20', '25', '30'], ['35', '40','' ] ]) second_column_25 = (matrix[:,2] == '') matrix[second_column_25, 2]='0' print(matrix)

09 数据类型转换

NumPy ndarray数据类型可以通过参数dtype 设定,而且可以使用astype转换类型,在处理文件时这个会很实用,注意astype 调用会返回一个新的数组,也就是原始数据的一份复制。

比如,把String转换成float。如下:

vector = numpy.array(["1", "2", "3"]) vector = vector.astype(float)

注意:上述例子中,如果字符串中包含非数字类型的时候,从string转float就会报错。

10 NumPy的统计计算方法

NumPy内置很多计算方法。其中最重要的统计方法有:

sum():计算数组元素的和;对于矩阵计算结果为一个一维数组,需要指定行或者列。mean():计算数组元素的平均值;对于矩阵计算结果为一个一维数组,需要指定行或者列。max():计算数组元素的最大值;对于矩阵计算结果为一个一维数组,需要指定行或者列。

需要注意的是,用于这些统计方法计算的数值类型必须是int或者float。

数组例子:

vector = numpy.array([5, 10, 15, 20]) vector.sum() #得到的结果是50

矩阵例子:

matrix= array([[ 5, 10, 15], [20, 10, 30], [35, 40, 45]]) matrix.sum(axis=1) array([ 30, 60, 120]) matrix.sum(axis=0) array([60, 60, 90])

如上述例子所示,axis = 1计算的是行的和,结果以列的形式展示。axis = 0计算的是列的和,结果以行的形式展示。

延伸学习

官方推荐教程是不错的入门选择:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

关于作者:敏感的水壶,阿里巴巴数据架构师,对大数据、自然语言处理、Python、Java相关技术有深入的研究,积累了丰富的实践经验。

灵巧的热狗,百炼智能自然语言处理专家,主要研究知识图谱、NLG等前沿技术,参与机器自动写作产品的研发与设计。

zydyl,七牛云高级算法专家,七牛AI实验室NLP&OCR方向负责人,主要负责七牛NLP以及OCR相关项目的研究与落地。

本文摘编自《Python自然语言处理实战:核心技术与算法》,经出版方授权发布。

延伸阅读《Python自然语言处理实战》

推荐语:阿里巴巴、前明略数据和七牛云的高级专家和科学家撰写,零基础掌握NLP的核心技术、方法论和经典算法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。