前提概念:
1、欧式距离:欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离
计算公式:
二维空间的公式
0ρ = sqrt( (x1-x2)^2+(y1-y2)^2 ) |x| = √( x2 + y2 )
三维空间的公式
0ρ = √( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ) |x| = √( x2 + y2 + z2 )
n维空间的公式
n维欧氏空间是一个点集,它的每个点X 或向量x可以表示为 (x[1],x[2],…,x[n]) ,其中 x[i](i = 1,2,…,n) 是实数,称为X的第i个坐标。
两个点A= (a[1],a[2],…,a[n]) 和B= (b[1],b[2],…,b[n]) 之间的距离 ρ(A,B) 定义为下面的公式:
ρ(A,B) =√ [ ∑( a[i] - b[i] )^2 ] (i = 1,2,…,n)
向量x= (x[1],x[2],…,x[n]) 的自然长度 |x| 定义为下面的公式:
|x| = √( x[1]^2 + x[2]^2 + … + x[n]^2 )
当使用布尔数组直接作为下标对象或者元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标运算。
nonzeros(a)返回数组a中值不为零的元素的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。例如对于一维布尔数组b1,nonzero(b1)所得到的是一个长度为1的元组,它表示b1[0]和b1[2]的值不为0(False)。
>>>b1=np.array([True,False,True,False])
>>>np.nonzero(b1) (array([0, 2]),)
对于二维数组b2,nonzero(b2)所得到的是一个长度为2的元组。它的第0个元素是数组a中值不为0的元素的第0轴的下标,第1个元素则是第1轴的下标,因此从下面的结果可知b2[0,0]、b[0,2]和b2[1,0]的值不为0:
>>>b2=np.array([[True,False,True],[True,False,False]])
>>>np.nonzero(b2) (array([0, 0, 1]), array([0, 2, 0]))