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/,包含下载安装信息以及使用说明等,推荐英文好的朋友直接阅读。
安装好numpy库后,我们使用时需要导入这个库,python代码为:
import numpy as np
其中“np”为我们给numpy库起的别名,这样我们需要使用numpy库里的函数时不需要输入numpy全名,例如使用numpy.array()等函数时可以简写为np.array(),提高效率。
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)
我是一维数组: [1 2 3 4 5 6 7 8 9]
我是二维数组:
[[1 2 3]
[4 5 6]
[7 8 9]]
dt3 = np.zeros(9)
dt4 = np.zeros((2,3))
print("我是9个元素全为0的一维数组:",dt3)
print("我是一个2行3列的元素全为0的二维数组:")
print(dt4)
我是9个元素全为0的一维数组: [ 0. 0. 0. 0. 0. 0. 0. 0. 0.]
我是一个2行3列的元素全为0的二维数组:
[[ 0. 0. 0.]
[ 0. 0. 0.]]
dt5 = np.ones(9)
dt6 = np.ones((2,3))
print("我是9个元素全为1的一维数组:",dt5)
print("我是一个2行3列的元素全为1的二维数组:")
print(dt6)
我是9个元素全为1的一维数组: [ 1. 1. 1. 1. 1. 1. 1. 1. 1.]
我是一个2行3列的元素全为1的二维数组:
[[ 1. 1. 1.]
[ 1. 1. 1.]]
dt7 = np.eye(3)
dt8 = np.eye(4)
print("我是一个3行3列的对角线元素为1,其余元素为0的二维数组:")
print(dt7)
print("我是一个4行4列的对角线元素为1,其余元素为0的二维数组:")
print(dt8)
我是一个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.]]
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)
我是一个从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]
dt12 = np.linspace(2,8,4)
dt13 = np.linspace(1,10,5)
print("把2-8平均分成4份:",dt12)
print("把1-10平均分成5份:",dt13)
把2-8平均分成4份: [ 2. 4. 6. 8.]
把1-10平均分成5份: [ 1. 3.25 5.5 7.75 10. ]
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)
[ 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列.
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)
我是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]]
new3 = np.arange(6)
print("我是new3:",new3)
print("new3的数据类型:",new3.dtype)
new3_1 = new3.astype(np.float64)
print("new3_1的数据类型:",new3_1.dtype)
我是new3: [0 1 2 3 4 5]
new3的数据类型: int32
new3_1的数据类型: float64
new4 = np.array([[1,4,9],[16,25,36]])
print("我是new4,一个两行三列的二维数组:")
print(new4)
我是new4,一个两行三列的二维数组:
[[ 1 4 9]
[16 25 36]]
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])
元素索引从0开始,我是new4的第一行: [1 4 9]
元素索引从0开始,我是new4的第一行第一个元素: 1
元素索引从0开始,我是new4的第二行第二列的元素: 25
元素索引从0开始,我是new4的第一列: [ 1 16]
元素索引从0开始,我是new4的第一列第二个元素: 16
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))
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. ]
print("查看数组中每个元素是否大于1:",new5 > 1)
print("查看数组中每个元素是否等于3:",new5 == 3)
print("查看数组中每个元素是否小于10:",new5 < 10)
查看数组中每个元素是否大于1: [False True True True True]
查看数组中每个元素是否等于3: [ True False False False False]
查看数组中每个元素是否小于10: [ True True True True True]
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))
我是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
矩阵乘法(只有第一个矩阵的列数等于第二个矩阵的行数时,矩阵之间才可以相乘)
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))
我是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爬虫之六:智联招聘进阶版