关于Python中numpy的基本使用详解以及速查

写在前面

现在写论文做毕设大概要用到这个,所以今天就大概把numpy的基本用法过了一遍,跟着视频中的例子练习了一遍,感觉还是蛮实用的。但是有的步骤可能用起来还不是很熟练。所以写了笔记以防后面忘了可以速查,同时分享给一同想要学习的小伙伴儿们~

numpy

numpy中所有的运算都是基于数组array运行的
  • import numpy as np
    引入numpy的库并起一个别名np
  • np.array([1,2,3,4,5])
    创建一个numpy的数组
  • np.zeros((3,2))
    创建一个三行2列的0矩阵
  • a = np.zeros((3,2))
  • a.shape
    输出零矩阵的形状,即行列数
  • np.ones((3,2))
    创建3行2列全为1的矩阵
  • np.arange(3,7)
    创建一个有序的数组
  • np.linspace(0,1,5)
    创建一个等间距的数列,其中前两个参数代表数组范围,最后一个参数为元素个数

图片1
图片2

numpy中数组默认类型是64位的浮点数,但可以用dypte指定其他的数据类型

图片3

对于现有的数组,也可以利用astype()来转换数据类型
numpy中的两个相同长度的数组可以直接进行加减乘除的运算,就是对应位置的元素进行运算。
  • np.dot(a,b)
    即对两个向量进行点乘运算
  • c@d
    矩阵乘法,等同于np.matmul()函数
  • np.sqrt(a)
    对数组中的所有数求平方根
  • np.sin(a)
    对数组中的所有数求三角函数
  • np.log(a)
    对数组中的所有数进行对数运算
  • np.power(a,2)
    对数组中的所有数进行指数运算

图片4

numpy中不同尺寸的数组也可以直接做运算
在相加时,numpy会先将各自的数组进行扩展,即复制,然后将对应位置的元素进行相加

图片5

图片6
图片7

  • e.argmin()和e.argmax()
    返回数组e中最小和最大元素的索引

  • e.sum()
    返回数组中所有元素的总和

  • e.mean()
    返回数组e中元素的平均值

  • np.median(a)
    返回数组a中元素的中位数

  • e.var()
    返回数组e的方差

  • e.std()
    返回数组e的标准方差

  • g.sum(axis=0)
    表示把数组g中每一列的数字相加,汇聚成一行
    图片10

  • g.sum(axis=1)
    表示把数组g中每一行的数字相加,汇聚成一列
    图片11

图片8

图片9

对于numpy中array的操作,还有以下几种基本操作:
  • 方括号中输入a<3则会返回所有小于3的元素
    图12
  • 也可以写筛选条件,下面这个例子将筛选出大于3且是偶数的数
    图13
注:这里写筛选条件的时候,&表示且的意思,|表示或的意思
  • 也可以对要提取的元素进行范围提取
    图片14
注:Python中都是左闭右开区间,所以这里返回的是[1, 2]
  • 也可以通过利用冒号来选中后续所有元素,或者可以直接省略掉冒号
    图片15
  • 也可以使用跨度来提取数组中的元素
    图片16

例:使用numpy进行图像处理

通常我们可以把一张图看成是一个二维数组,数组中的每个元素用来表示像素点的亮度值

图片17

对于彩色的图片我们可以用三维数组来表示,数组中的第三维分别存储了像素点的红绿蓝分量

图片18

from PIL import Image
im = Image.open('D:\\研究生课程文件\\区块链相关资料\\pythonProject1\\testproject2\\door.jpeg')
im.show()
im = np.array(im)
im.shape
上述代码的意思就是先从PIL中导入Image这个类,然后打开图片door.jpeg,前面的参数是详细的文件路径,接着就是输出这张图片,然后把图片转换为array,然后输出数组的形状。
图片如下:

图片19

转换成数组输出后为:(800, 1200, 3),即转换成了一个800行1200列的三维数组。
  • im_r = im[:,:,0]
  • Image.fromarray(im_r).show()
使用这种方式可以单独提取出像素点的红色分量
此时输出的图片如下:

图片20

然后我试着执行以下步骤时,报错了~

图片21

原因是两张图片转化出来的行列不一致,没办法进行直接相加,而且这两种形状还不能进行广播,这里其实是可以通过resize()函数处理一下,让他们行列相等,就可以相加,后面就是这样进行了处理。
im2 = Image.open('D:\\研究生课程文件\\区块链相关资料\\pythonProject1\\testproject2\\wife.jpeg')
out = im2.resize((1200,800),Image.ANTIALIAS)
im3 = np.array(out)
im3.shape
im_blend1 = im * 0.4 + im3 * 0.6
im_blend1 = im_blend1.astype(np.uint8)
Image.formarray(im_blend1).show()
这里就是再打开图片wife.jpeg,然后利用resize函数对图片进行处理,然后再转化为array,这个时候它的array形状就和之前的door.jpeg是一样的了!
即输出数组为(800, 1200, 3),然后就可以相加了。
图片wife.jpeg如下:

图片22

然后将两张图片进行叠加以后如下:

图片23

也可以利用跨度对图片进行降采样
  • im_downsample = im[::10, ::10,:]
    利用跨度对图片进行降采样
  • im_flipped = im[::-1,:,:]
  • Image.fromarray(im_flipped).show()
    对图片进行翻转并输出
  • im_cropped = im[40:540,400:900,:]
  • Image.fromarray(im_cropped).show()
    对图片进行裁切并输出

总结

numpy提高Python的计算速度,是通过将问题向量化和并行化的思路来实现的。这种思想在其他的技术中也有应用,比如CUDA,Shader编程和深度学习中也会用到。

图片24

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
NumpyPython用于科学计算的基础库之一,它提供了高效的多维数组对象,以及用于处理这些数组的工具。下面是一些常用的Numpy用法: 1. 导入Numpy库 ```python import numpy as np ``` 2. 创建Numpy数组 可以通过`np.array()`函数来创建一个Numpy数组。 ```python a = np.array([1, 2, 3]) # 一维数组 b = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 ``` 也可以通过`np.zeros()`或`np.ones()`函数创建一个全0或全1的数组。 ```python c = np.zeros((2, 3)) # 2行3列的全0数组 d = np.ones((3, 4)) # 3行4列的全1数组 ``` 3. Numpy数组的属性 可以通过以下属性获取Numpy数组的信息: ```python print(a.shape) # 输出(3,),表示一维数组,长度为3 print(b.shape) # 输出(2, 3),表示二维数组,2行3列 print(c.shape) # 输出(2, 3),表示二维数组,2行3列 print(d.shape) # 输出(3, 4),表示二维数组,3行4列 print(a.ndim) # 输出1,表示一维数组 print(b.ndim) # 输出2,表示二维数组 print(c.ndim) # 输出2,表示二维数组 print(d.ndim) # 输出2,表示二维数组 ``` 4. Numpy数组的切片和索引 可以使用切片语法和索引语法来获取Numpy数组的部分内容。 ```python a = np.array([1, 2, 3, 4, 5]) print(a[1:3]) # 输出[2, 3],表示获取a数组下标为1和下标为2的元素 print(a[2:]) # 输出[3, 4, 5],表示获取a数组下标为2及其后面的所有元素 print(a[:3]) # 输出[1, 2, 3],表示获取a数组前三个元素 print(a[-2:]) # 输出[4, 5],表示获取a数组倒数两个元素及其后面的所有元素 b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(b[1:]) # 输出[[4, 5, 6], [7, 8, 9]],表示获取b数组第2行及其后面的所有行 print(b[:, 1:]) # 输出[[2, 3], [5, 6], [8, 9]],表示获取b数组每行的第2个元素及其后面的所有元素 ``` 5. Numpy数组的运算 Numpy数组支持各种数学运算,比如加、减、乘、除等。 ```python a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print(a + b) # 输出[5, 7, 9],表示对应元素相加 print(a - b) # 输出[-3, -3, -3],表示对应元素相减 print(a * b) # 输出[4, 10, 18],表示对应元素相乘 print(a / b) # 输出[0.25, 0.4, 0.5],表示对应元素相除 ``` 6. Numpy数组的广播 Numpy数组支持广播,即在进行运算时,两个数组的形状不同时,会自动将小的数组复制成大的数组的形状。 ```python a = np.array([1, 2, 3]) b = 2 print(a + b) # 输出[3, 4, 5],表示将b复制成[2, 2, 2],然后与a数组相加 ``` 以上是Numpy的一些基本用法,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

loveCC_orange

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

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

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

打赏作者

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

抵扣说明:

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

余额充值