Python--Numpy学习笔记

目录

前言

一、什么是numpy?

二、numpy创建数组(矩阵)

 2.1 数组示例

 2.2 定义数据类型

2.3 操作浮点数

2.4 数组形状

三、数组计算

3.1 数组和数的计算

3.1.1 加减法

3.1.2 乘除法

3.2 数组和数组计算

3.2.1 加减法

3.2.2 乘除法

3.2.3  矩阵点乘

四、轴(axis)

五、numpy读取存储数据

六、numpy中的转置

七、numpy的索引和切片

7.1 索引

7.2 数值修改

7.3 numpy中三元运算符

八、numpy中的nan和inf

九,数组的拼接

9.1 水平、竖直拼接

9.2 数组行列交换

十 其他

10.1 numpy其他函数

10.2 numpy生成随机数


前言

为什么要学习numpy

(1)快速

(2)方便

(3)是科学计算的基础库

一、什么是numpy?

NumPy 是一个 Python 科学计算库的基础库。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。也是为后面机器学习打下基础。

二、numpy创建数组(矩阵)

 2.1 数组示例

代码:

import numpy as np

a = np.array([1,2,3,4,5])
b = np.array(range(10))
c = np.arange(10)
d = np.array([1.1,2.2,3.3])

print("a:", a)
print("b:", b)
print("c:", c)
print("array类型", type(a))
print("c存放数据类型", c.dtype)
print("d存放数据类型", d.dtype)

结果:

a: [1 2 3 4 5]
b: [0 1 2 3 4 5 6 7 8 9]
c: [0 1 2 3 4 5 6 7 8 9]
array类型 <class 'numpy.ndarray'>
c存放数据类型 int32
d存放数据类型 float64

numpy中常见的更多数据类型:

 2.2 定义数据类型

代码:

import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4,5], dtype=float)
c = np.array([1,2,3,4,5], dtype="float32")
d = np.array([1,0,0,0,1], dtype=bool)

print("a存放数据类型", a.dtype)
print("b存放数据类型", b.dtype)
print("c存放数据类型", c.dtype)
print("d:", d)
print("d存放数据类型", d.dtype)
#调整数据类型
d = d.astype(int)
print("d存放数据类型", d.dtype)

结果:

a存放数据类型 int32
b存放数据类型 float64
c存放数据类型 float32
d: [ True False False False  True]
d存放数据类型 bool
d存放数据类型 int32

2.3 操作浮点数

代码:

import numpy as np
import random
a = np.array([random.random() for i in range(10)])  #生成十个0-1之间随机数
print("a:", a)
print("a.dtype:", a.dtype)
b = np.round(a, 3)  #取小数点后几位
print("b:", b)
print("b.dtype:", b.dtype)

结果:

a: [0.53867519 0.53154411 0.17961852 0.09215703 0.21608598 0.77266274 0.55812637 0.55287423 0.3019635  0.68435789]
a.dtype: float64
b: [0.539 0.532 0.18  0.092 0.216 0.773 0.558 0.553 0.302 0.684]
b.dtype: float64

2.4 数组形状

代码:

import numpy as np
a = np.array([[3,4,5,6,7,8], [4,5,6,7,8,9]])
print("a:",a)
print("a.shape:", a.shape)
b = a.reshape(3,4)
print("b:",b)
print("b.shape:", b.shape)
c = b.reshape(1,12)
print("c:",c)
print("c.shape:", c.shape)
d = np.arange(24).reshape((2,3,4))  #2块数据,每一块数据是3*4
print("d.shape:", d.shape)
e = a.flatten()  #按照行 列展开成一维
print("e:", e)

结果:

a: [[3 4 5 6 7 8]
 [4 5 6 7 8 9]]
a.shape: (2, 6)
b: [[3 4 5 6]
 [7 8 4 5]
 [6 7 8 9]]
b.shape: (3, 4)
c: [[3 4 5 6 7 8 4 5 6 7 8 9]]
c.shape: (1, 12)
d.shape: (2, 3, 4)
e: [3 4 5 6 7 8 4 5 6 7 8 9]

三、数组计算

3.1 数组和数的计算

3.1.1 加减法

数组a加(或减)数b会在数组a中每一个元素都加上这个数b进行运算,这是numpy中的广播机制。

广播机制:如果两个数组的后缘长度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失或长度为1的维度上进行。

代码如下。

import numpy as np
a = np.array([[3,4,5,6,7,8], [4,5,6,7,8,9]])
b = 2
a = a+b
print(a)

结果:

[[ 5  6  7  8  9 10]
 [ 6  7  8  9 10 11]]

3.1.2 乘除法

数组a乘(或者除)数b会在数组a中每一个元素都加上这个数b进行运算,代码如下。

import numpy as np
a = np.array([[3,4,5,6,7,8], [4,5,6,7,8,9]])
b = 2
a = a*b
print(a)

结果:

[[ 6  8 10 12 14 16]
 [ 8 10 12 14 16 18]]

3.2 数组和数组计算

3.2.1 加减法

代码:

import numpy as np
a = np.arange(0,24).reshape(4, 6)
b = np.arange(100,124).reshape(4, 6)
c = a+b
print(c)
d = np.arange(0, 6)
e = a - d
print(e)

结果:

[[100 102 104 106 108 110]
 [112 114 116 118 120 122]
 [124 126 128 130 132 134]
 [136 138 140 142 144 146]]
[[ 0  0  0  0  0  0]
 [ 6  6  6  6  6  6]
 [12 12 12 12 12 12]
 [18 18 18 18 18 18]]

3.2.2 乘除法

矩阵a*(/)矩阵b是每个元素对应位置进行乘除法,代码如下。

import numpy as np
a = np.arange(0,24).reshape(4, 6)
b = np.arange(100,124).reshape(4, 6)
c = a*b
print("c:", c)
d = np.arange(0, 6)
e = a * d
print("e:",e)

结果:

c: [[   0  101  204  309  416  525]
 [ 636  749  864  981 1100 1221]
 [1344 1469 1596 1725 1856 1989]
 [2124 2261 2400 2541 2684 2829]]
e: [[  0   1   4   9  16  25]
 [  0   7  16  27  40  55]
 [  0  13  28  45  64  85]
 [  0  19  40  63  88 115]]

3.2.3  矩阵点乘

矩阵点乘与矩阵乘法不同,矩阵点乘公式如下图。

 代码中实现点乘使用np.dot()进行计算,代码如下:

import numpy as np
a = np.arange(0,9).reshape((3, 3))
b = np.arange(10,19).reshape((3, 3))
c = np.dot(a,b)
print(c)

结果:

[[ 45  48  51]
 [162 174 186]
 [279 300 321]]

四、轴(axis)

在numpy中轴可以理解为方向,使用0,1,2这些数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴。

有了轴的概念后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值。

五、numpy读取存储数据

采用np.loadtxt()读取外界数据,使用方法如下:

np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

 存储数据采用np.save("名称.npy", 数组)就可以。

六、numpy中的转置

转置是一种变换,对于numpy中的数组来说,就是在对焦方向交换数据。代码如下:

import numpy as np
a = np.arange(24).reshape(4, 6)
print(a.transpose())
print(a.swapaxes(1,0))
print(a.T)

以上三种方式均可以对矩阵a进行转置。

七、numpy的索引和切片

7.1 索引

代码:

import numpy as np
a = np.arange(24).reshape(4, 6)
print(a)
print("*"*10)
#取行
print(a[2])   #取第三行
print("*"*10)
#取连续多行
print(a[2:])
print("*"*10)
#取不连续多行
print(a[[0,2]])
print("*"*10)
#取列
print(a[:,2])   #取第三列
print("*"*10)
#取连续多列
print(a[:,2:5])
print("*"*10)
#取不连续多列
print(a[:,[0,2]])
print("*"*10)
#取行列,比如取第三行第四列的值
print(a[2,3])
print("*"*10)
#取多行多列,比如取第二行到第三行,第一列到第四列的结果
print(a[1:3, 0:4])
print("*"*10)
#取多个不相邻的点
print(a[[0,1,3], [0,3,1]])  #按照每个[]内数据按位找点
#点的结果是[0,0]  [1,3]  [3,1]
print("*"*10)

7.2 数值修改

代码:

import numpy as np
a = np.arange(24).reshape(4, 6)
print(a)
print("*"*10)
a[0,0]=5
print(a)
print("*"*10)
a[:,1:4] = 3
print(a)

结果:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
**********
[[ 5  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
**********
[[ 5  3  3  3  4  5]
 [ 6  3  3  3 10 11]
 [12  3  3  3 16 17]
 [18  3  3  3 22 23]]

7.3 numpy中三元运算符

numpy中三元运算符如下代码所示,会将a中小于10的数字替换为0,大于10的数字替换为20。代码如下:

import numpy as np
a = np.arange(24).reshape(4, 6)
print(a)
print("*"*20)
print(np.where(a<10,0,20))

结果:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
********************
[[ 0  0  0  0  0  0]
 [ 0  0  0  0 20 20]
 [20 20 20 20 20 20]
 [20 20 20 20 20 20]]

假设要将小于9的数字替换为9,大于15的数字替换为15,代码如下:

import numpy as np
a = np.arange(24).reshape(4, 6)
print(a)
print("*"*20)
print(a.clip(9,15))

结果:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
********************
[[ 9  9  9  9  9  9]
 [ 9  9  9  9 10 11]
 [12 13 14 15 15 15]
 [15 15 15 15 15 15]]

八、numpy中的nan和inf

nan不是一个数字,当我们读取本地文件为float的时候,如果有确实,会出现nan;当做了一个不合适的计算时候也会出现nan。

inf表示正无穷,-inf表示负无穷。当一个数字除以0时候会出现inf。

九,数组的拼接

9.1 水平、竖直拼接

简单的数组水平、竖直拼接代码:

import numpy as np
a = np.arange(0,12).reshape(2,6)
b = np.arange(12,24).reshape(2,6)
#竖状拼接
c = np.vstack((a,b))
print(c)
print("*"*20)
#水平拼接
c = np.hstack((a,b))
print(c)

结果:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
********************
[[ 0  1  2  3  4  5 12 13 14 15 16 17]
 [ 6  7  8  9 10 11 18 19 20 21 22 23]]

9.2 数组行列交换

代码:

import numpy as np
a = np.arange(0,12).reshape(3,4)
#行交换
a[[1,2],:]=a[[2,1],:]
print(a)
print("*"*20)
#列交换
a[:,[1,2]]=a[:,[2,1]]
print(a)
print("*"*20)

结果:

[[ 0  1  2  3]
 [ 8  9 10 11]
 [ 4  5  6  7]]
********************
[[ 0  2  1  3]
 [ 8 10  9 11]
 [ 4  6  5  7]]

十 其他

10.1 numpy其他函数

代码:

import numpy as np
a = np.arange(0,12).reshape(3,4)
#获取最大值与最小值的位置
print(np.argmax(a,axis = 0))#按列来看最大值的位置
print(np.argmin(a,axis = 0))#按行来看最大值的位置
#创建一个全为0的数组
b=np.zeros((3,4))
#创建一个全为1的数组
c=np.ones((3,4))
#创建一个对角线为1的正方形矩阵
d = np.eye(4)

10.2 numpy生成随机数

 表中均匀分布与正态分布如下图:

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉迷学习的郑博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值