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