前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >numpy基础操作快速入门

numpy基础操作快速入门

作者头像
王强
发布2018-08-09 17:25:11
7200
发布2018-08-09 17:25:11
举报
文章被收录于专栏:Python爬虫实战

Numpy是一个开源的Python科学计算库,它是python科学计算库的基础库,许多其他着名的科学计算库如Pandas,Scikit-learn等都要用到Numpy库的一些功能。

numpy库入

由于numpy不是python自带库,需要自己下载安装(如果用的是Anaconda,则不需要再去下载numpy库,因为其自带python环境以及许多第三方python库,比如numpy库,pandas库,matplotlib库,requests库等)。本文基于python3.6版本对numpy做一些基础讲解,以通俗易通,形象直观为主,对概念的阐释以及函数的原理等内容没有进行深入讨论。

numpy库的官方网址是:http://www.numpy.org/,包含下载安装信息以及使用说明等,推荐英文好的朋友直接阅读。

1. 导入

安装好numpy库后,我们使用时需要导入这个库,python代码为:

代码语言:javascript
复制
import numpy as np

其中“np”为我们给numpy库起的别名,这样我们需要使用numpy库里的函数时不需要输入numpy全名,例如使用numpy.array()等函数时可以简写为np.array(),提高效率。

2. 创建数组:

2.1 使用array()函数创建数组:

代码语言:javascript
复制
dt1 = np.array([1,2,3,4,5,6,7,8,9])
dt2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print("我是一维数组:",dt1)
print("我是二维数组:")
print(dt2)
代码语言:javascript
复制
我是一维数组: [1 2 3 4 5 6 7 8 9]
我是二维数组:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

2.2 使用zeros()函数创建元素全部为0的数组

代码语言:javascript
复制
dt3 = np.zeros(9)
dt4 = np.zeros((2,3))
print("我是9个元素全为0的一维数组:",dt3)
print("我是一个2行3列的元素全为0的二维数组:")
print(dt4)
代码语言:javascript
复制
我是9个元素全为0的一维数组: [ 0.  0.  0.  0.  0.  0.  0.  0.  0.]
我是一个2行3列的元素全为0的二维数组:
[[ 0.  0.  0.]
 [ 0.  0.  0.]]

2.3 使用ones()函数创建元素全部为1的数组

代码语言:javascript
复制
dt5 = np.ones(9)
dt6 = np.ones((2,3))
print("我是9个元素全为1的一维数组:",dt5)
print("我是一个2行3列的元素全为1的二维数组:")
print(dt6)
代码语言:javascript
复制
我是9个元素全为1的一维数组: [ 1.  1.  1.  1.  1.  1.  1.  1.  1.]
我是一个2行3列的元素全为1的二维数组:
[[ 1.  1.  1.]
 [ 1.  1.  1.]]

2.4 使用eye()函数创建对角线元素为1,其余元素为0的方阵(行数与列数相等)

代码语言:javascript
复制
dt7 = np.eye(3)
dt8 = np.eye(4)
print("我是一个3行3列的对角线元素为1,其余元素为0的二维数组:")
print(dt7)
print("我是一个4行4列的对角线元素为1,其余元素为0的二维数组:")
print(dt8)
代码语言:javascript
复制
我是一个3行3列的对角线元素为1,其余元素为0的二维数组:
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
我是一个4行4列的对角线元素为1,其余元素为0的二维数组:
[[ 1.  0.  0.  0.]
 [ 0.  1.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]

2.5 使用arange()函数创建一维数组,可以设定起始值,结束值(数组中不包含结束值)和步长

代码语言:javascript
复制
dt9 = np.arange(5)
dt10 = np.arange(1,10,1)
dt11 = np.arange(2,8,2)
print("我是一个从0开始,从5结束,步长为1,不包含5的一维数组:",dt9)
print("我是一个从1开始,从10结束,步长为1,不包含10的一维数组:",dt10)
print("我是一个从2开始,从8结束,步长为2,不包含8的一维数组:",dt11)
代码语言:javascript
复制
我是一个从0开始,从5结束,步长为1,不包含5的一维数组: [0 1 2 3 4]
我是一个从1开始,从10结束,步长为1,不包含10的一维数组: [1 2 3 4 5 6 7 8 9]
我是一个从2开始,从8结束,步长为2,不包含8的一维数组: [2 4 6]

2.6 使用linspace()函数(注意不要顺手写成linespace)创建一维数组,可以设定起始值,结束值(数组中包含结束值)和均匀分布的元素个数

代码语言:javascript
复制
dt12 = np.linspace(2,8,4)
dt13 = np.linspace(1,10,5)
print("把2-8平均分成4份:",dt12)
print("把1-10平均分成5份:",dt13)
代码语言:javascript
复制
把2-8平均分成4份: [ 2.  4.  6.  8.]
把1-10平均分成5份: [  1.     3.25   5.5    7.75  10.  ]

3.创建好数组后,我们看一下可以对数组进行哪些操作

3.1 使用shape属性查看数组结构

代码语言:javascript
复制
new1 = np.array([0,2,4,6,8,10])
new2 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(new1)
print(new2)
print("我是new1的shape属性:",new1.shape)
print("我是new2的shape属性:",new2.shape)
代码语言:javascript
复制
[ 0  2  4  6  8 10]
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
我是new1的shape属性: (6,)
我是new2的shape属性: (4, 3)

new1的结果中只有一个数,直观理解为new1为一维结构,6表示new1数组含有6个元素; new2的结果中含有两个数,直观理解为new2为二维结构,(4,3)表示new2数组为4行3列.

3.2 修改shape属性可以改变原数组的结构,使用reshape()函数可以在原数组的基础上新建一个别的维度结构的数组

代码语言:javascript
复制
new1.shape = (2,3)
print("我是new1数组,现在我变成了2行3列,不信你看:")
print(new1)
new2_1 = new2.reshape(6,2)
print("我是new2,我没变")
print(new2)
print("我是new2的亲兄弟new2_1,我长这样:")
print(new2_1)
代码语言:javascript
复制
我是new1数组,现在我变成了2行3列,不信你看:
[[ 0  2  4]
 [ 6  8 10]]
我是new2,我没变
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
我是new2的亲兄弟new2_1,我长这样:
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]
 [11 12]]

3.3 使用dtype属性查看数组中元素的类型以及使用astype()函数转换其数据类型

代码语言:javascript
复制
new3 = np.arange(6)
print("我是new3:",new3)
print("new3的数据类型:",new3.dtype)
new3_1 = new3.astype(np.float64)
print("new3_1的数据类型:",new3_1.dtype)
代码语言:javascript
复制
我是new3: [0 1 2 3 4 5]
new3的数据类型: int32
new3_1的数据类型: float64

3.4 使用[]对数组的元素进行索引与切片

代码语言:javascript
复制
new4 = np.array([[1,4,9],[16,25,36]])
print("我是new4,一个两行三列的二维数组:")
print(new4)
代码语言:javascript
复制
我是new4,一个两行三列的二维数组:
[[ 1  4  9]
 [16 25 36]]
代码语言:javascript
复制
print("元素索引从0开始,我是new4的第一行:",new4[0])
print("元素索引从0开始,我是new4的第一行第一个元素:",new4[0][0])
print("元素索引从0开始,我是new4的第二行第二列的元素:",new4[1,1])
print("元素索引从0开始,我是new4的第一列:",new4[:,0])#只有冒汗表示选取整个轴上的元素,对于二维数组来说,逗号前面表示行,逗号后面表示列
print("元素索引从0开始,我是new4的第一列第二个元素:",new4[:,0][1])
代码语言:javascript
复制
元素索引从0开始,我是new4的第一行: [1 4 9]
元素索引从0开始,我是new4的第一行第一个元素: 1
元素索引从0开始,我是new4的第二行第二列的元素: 25
元素索引从0开始,我是new4的第一列: [ 1 16]
元素索引从0开始,我是new4的第一列第二个元素: 16

3.5 数组元素运算

代码语言:javascript
复制
new5 = np.array([1,3,5,7,9])
print("add()函数表示数组每个元素加上一个数,以1举例:",np.add(new5,1))
print("subtract()函数表示数组每个元素减去一个数,以1举例:",np.subtract(new5,1))
print("multiply()函数表示数组每个元素乘上一个数,以2举例:",np.multiply(new5,2))
print("divide()函数表示数组每个元素除以一个数,以0.5举例:",np.divide(new5,0.5))
print("mod()函数表示数组每个元素求余数,以6举例:",np.mod(new5,6))
print("power()函数表示数组每个元素进行乘方运算,以2举例:",np.power(new5,2))
print("sqrt()函数表示数组每个元素开平方根",np.sqrt(new5))
代码语言:javascript
复制
add()函数表示数组每个元素加上一个数,以1举例: [ 2  4  6  8 10]
subtract()函数表示数组每个元素减去一个数,以1举例: [0 2 4 6 8]
multiply()函数表示数组每个元素乘上一个数,以2举例: [ 2  6 10 14 18]
divide()函数表示数组每个元素除以一个数,以0.5举例: [  2.   6.  10.  14.  18.]
mod()函数表示数组每个元素求余数,以6举例: [1 3 5 1 3]
power()函数表示数组每个元素进行乘方运算,以2举例: [ 1  9 25 49 81]
sqrt()函数表示数组每个元素开平方根 [ 1.          1.73205081  2.23606798  2.64575131  3.        ]
代码语言:javascript
复制
print("查看数组中每个元素是否大于1:",new5 > 1)
print("查看数组中每个元素是否等于3:",new5 == 3)
print("查看数组中每个元素是否小于10:",new5 < 10)
代码语言:javascript
复制
查看数组中每个元素是否大于1: [False  True  True  True  True]
查看数组中每个元素是否等于3: [ True False False False False]
查看数组中每个元素是否小于10: [ True  True  True  True  True]

3.6 数组运算

代码语言:javascript
复制
new6 = np.array([[1,2,3,4,5],[3,4,5,6,7]])
print("我是2行5列的数组new6:")
print(new6)
print("max()函数返回所有元素中的最大值:",np.max(new6))
print("min()函数返回所有元素中的最小值:",np.min(new6))
print("argmax()函数返回所有元素中的最大值的索引:",np.argmax(new6))
print("argmin()函数返回所有元素中的最小值的索引:",np.argmin(new6))
print("sum()函数对所有元素求和:",np.sum(new6))
print("sum(axis = 1)函数对数组按行求和:",np.sum(new6,axis = 1))
print("sum(axis = 0)函数对数组按列求和:",np.sum(new6,axis = 0))
print("mean()函数对所有元素求算数平均值:",np.mean(new6))
代码语言:javascript
复制
我是2行5列的数组new6:
[[1 2 3 4 5]
 [3 4 5 6 7]]
max()函数返回所有元素中的最大值: 7
min()函数返回所有元素中的最小值: 1
argmax()函数返回所有元素中的最大值的索引: 9
argmin()函数返回所有元素中的最小值的索引: 0
sum()函数对所有元素求和: 40
sum(axis = 1)函数对数组按行求和: [15 25]
sum(axis = 0)函数对数组按列求和: [ 4  6  8 10 12]
mean()函数对所有元素求算数平均值: 4.0

矩阵乘法(只有第一个矩阵的列数等于第二个矩阵的行数时,矩阵之间才可以相乘)

代码语言:javascript
复制
new7 = np.array([[1,1],[2,2],[3,3],[4,4],[5,5]])
print("我是2行5列的数组new6:")
print(new6)
print("我是5行2列的数组new7:")
print(new7)
print("通过dot()函数得到矩阵乘矩阵,而不是通过*,例如np.dot(new6,new7),结果如下:")
print(np.dot(new6,new7))
代码语言:javascript
复制
我是2行5列的数组new6:
[[1 2 3 4 5]
 [3 4 5 6 7]]
我是5行2列的数组new7:
[[1 1]
 [2 2]
 [3 3]
 [4 4]
 [5 5]]
通过dot()函数得到矩阵乘矩阵,而不是通过*,例如np.dot(new6,new7),结果如下:
[[55 55]
 [85 85]]

本文介绍了numpy基础操作,后续还会推出进阶操作,敬请期待!

推荐阅读:

Python爬虫:十几行代码下载王者荣耀所有皮肤

Python爬虫之二:自制简易词典

Python爬虫之三:抓取猫眼电影TOP100

Python爬虫之四:今日头条街拍美图

Python爬虫之五:抓取智联招聘基础版

Python爬虫之六:智联招聘进阶版


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C与Python实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 导入
  • 2. 创建数组:
    • 2.1 使用array()函数创建数组:
      • 2.2 使用zeros()函数创建元素全部为0的数组
        • 2.3 使用ones()函数创建元素全部为1的数组
          • 2.4 使用eye()函数创建对角线元素为1,其余元素为0的方阵(行数与列数相等)
            • 2.5 使用arange()函数创建一维数组,可以设定起始值,结束值(数组中不包含结束值)和步长
              • 2.6 使用linspace()函数(注意不要顺手写成linespace)创建一维数组,可以设定起始值,结束值(数组中包含结束值)和均匀分布的元素个数
              • 3.创建好数组后,我们看一下可以对数组进行哪些操作
                • 3.1 使用shape属性查看数组结构
                  • 3.2 修改shape属性可以改变原数组的结构,使用reshape()函数可以在原数组的基础上新建一个别的维度结构的数组
                    • 3.3 使用dtype属性查看数组中元素的类型以及使用astype()函数转换其数据类型
                      • 3.4 使用[]对数组的元素进行索引与切片
                        • 3.5 数组元素运算
                          • 3.6 数组运算
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档