NumPy学习(四)

这篇博客介绍了如何使用NumPy计算两个数组间的欧氏距离,查找一维数组的局部极大值(峰值),以及转换numpy的datetime64对象为datetime的datetime对象。示例代码包括了数学函数、搜索和时间日期处理的方法。
摘要由CSDN通过智能技术生成

NumPy学习(四)

计算两个数组a和数组b之间的欧氏距离。

  • x = np.array([1, 2, 3, 4, 5])
  • y = np.array([4, 5, 6, 7, 8])

【知识点:数学函数、线性代数】

  • 如何计算两个数组之间的欧式距离?

关于欧氏距离可以参考这篇文章【Python】欧氏距离和余弦距离

首先还是调用numpy库,然后定义这两个向量。

>>> import numpy as np
>>> x = np.array([1, 2, 3, 4, 5])
>>> y = np.array([4, 5, 6, 7, 8])

【法一】按照欧氏距离的公式

>>> dist1 = np.sqrt(np.sum((x - y) ** 2))
>>> print(dist1)
6.708203932499369

【法二】也可以直接调用np库中的函数

>>> dist2 = np.linalg.norm(x - y)
>>> print(dist2)
6.708203932499369

找到一个一维数字数组a中的所有峰值。峰顶是两边被较小数值包围的点。

  • a = np.array([1, 3, 7, 1, 2, 6, 0, 1])

【知识点:数学函数、搜索】

  • 如何在一维数组中找到所有的局部极大值(或峰值)?

【法一】按照峰顶的定义,遍历数组。

>>> a = np.array([1, 3, 7, 1, 2, 6, 0, 1])
>>> b = list()
>>> for i in range(1, len(a)-1):
	if a[i]>a[i-1] and a[i]>a[i+1]:
		b.append(a[i])

		
>>> print(b)
[7, 6]
>>> 

【法二】使用np.diff()np.sign()方法。

  • np.diff()返回一个新的数组,数组元素为原数组每行的后一个值减去前一个值。
  • np.sign()返回某个数的符号。
>>> dif1 = np.diff(a)
>>> print(dif1)
[ 2  4 -6  1  4 -6  1]
>>> sig  = np.sign(dif1)
>>> print(sig)
[ 1  1 -1  1  1 -1  1]
>>> dif2 = np.diff(sig)
>>> print(dif2)
[ 0 -2  2  0 -2  2]
>>> index = np.where(np.equal(dif2, -2))[0] + 1
>>> print(index)
[2 5]
>>> b = a[index]
>>> print(b)
[7 6]
>>> 

将numpy的datetime64对象转换为datetime的datetime对象。

  • dt64 = np.datetime64('2020-02-25 22:10:10')

【知识点:时间日期和时间增量】

  • 如何将numpy的datetime64对象转换为datetime的datetime对象?
>>> import datetime
>>> dt64 = np.datetime64('2020-02-25 22:10:10')
>>> print(dt64)
2020-02-25T22:10:10
>>> dt = dt64.astype(datetime.datetime)
>>> print(dt)
2020-02-25 22:10:10

同样的,我们也可以从datetime对象中构造datetime64对象:

>>> d = datetime.datetime(2020, 2, 25, 22, 20, 20)
>>> print(d)
2020-02-25 22:20:20
>>> nd = np.datetime64(d)
>>> print(nd)
2020-02-25T22:20:20.000000

创建长度为10的numpy数组,从5开始,在连续的数字之间的步长为3。

【知识点:数组的创建与属性】

  • 如何在给定起始点、长度和步骤的情况下创建一个numpy数组序列?
>>> start = 5
>>> step = 3
>>> length = 10
>>> a = np.arange(start, start+step*length, step)
>>> print(a)
[ 5  8 11 14 17 20 23 26 29 32]
>>> 

将本地图像导入并将其转换为numpy数组。

【知识点:数组的创建与属性】

  • 如何将图像转换为numpy数组?
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> okita = plt.imread("Okita.jpg")
>>> print(type(okita))
<class 'numpy.ndarray'>
>>> print(okita.shape)
(724, 1024, 3)

可以看到,okita数组的shape(724, 1024, 3),即大小为724 * 1024像素, [R, G, B]三通道。

最后,放出我老婆照片(滑稽)。

>>> plt.show()
>>> 

运行截图
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值