python中向量指的是什么意思

Python011

python中向量指的是什么意思,第1张

一、向量是什么

在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的只有大小,没有方向的量叫做数量(物理学中称标量)

在这里,向量即一维数组,用 arange 函数创建向量是最简单的方式之一:

arange函数也可以指定初始值、终止值和步长来创建一维数组:

向量还能直接对每个元素进行运算:

二、创建向量

上面使用 arange 则是创建向量的一种方式,其实只要是数组创建的函数均可以创建向量,如:

linspace() 函数

前文介绍:linspace 通过制定初始值、终止值和元素个数创建等差数列向量,通过endpoint 参数指定是否包含终止值,默认为True

logspace() 函数

同linspace,创建等比数列,基数通过base参数指定,默认基数为10

zeros() 函数和 ones() 函数

这两个函数分别可以创建指定长度或形状的全0或全1的 ndarray 数组,比如:

指定数据类型:

empty() 函数

这个函数可以创建一个没有任何具体值的 ndarray 数组,例如:

random.randn() 函数

randn 是 numpy.random 中生成正态分布随机数据的函数

fromstring() 函数

从字符串创建数组

上面从字符串创建的数组,定义为整形8bit,创建出来的其实就是字符串的ASCII 码

fromfunction() 函数

从函数创建数组,是数据分析常见的方法

可先定义一个从下标计算数值的函数,然后用fromfunction 创建数组

fromfunction 第一个参数为计算每个数组元素的函数名,第二个参数指定数组的形状。因为它支持多维数组,所以第二个参数必须是一个序列。

例如我创建一个九九乘法表:

注意,fromfunction 函数中的第二个参数指定的是数组的下标,下标作为实参通过遍历的方式传递给函数的形参。

众多python培训视频,尽在python学习网,欢迎在线学习!

在很多算法中都会涉及到求向量欧式距离,例如机器学习中的KNN算法,就需要对由训练集A和测试集B中的向量组成的所有有序对(Ai,Bi),求出Ai和Bi的欧式距离。这样的话就会带来一个二重的嵌套循环,在向量集很大时效率不高。

这里介绍如何将这一过程用矩阵运算实现。

假设有两个三维向量集,用矩阵表示:

A=[a11a12a21a22a31a32]

B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥

要求A,B两个集合中的元素两两间欧氏距离。

先求出ABT:

ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥

然后对A和BT分别求其中每个向量的模平方,并扩展为2*3矩阵:

Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥

Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥

然后:

Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥

将上面这个矩阵一开平方,就得到了A,B向量集两两间的欧式距离了。

下面是Python实现:

import numpy

def EuclideanDistances(A, B):

BT = B.transpose()

vecProd = A * BT

SqA = A.getA()**2

sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))

sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))

SqB = B.getA()**2

sumSqB = numpy.sum(SqB, axis=1)

sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))

SqED = sumSqBEx + sumSqAEx - 2*vecProd

ED = (SqED.getA())**0.5

return numpy.matrix(ED)

不看numpy一维数组的话,就是len相同的一个列表相同索引值相加吧。

x1=[1,2,3]

x2=[4,5,6]

x3=[]

def add():

for i in range(0,len(x1)):

x3.append(x1[i]+x2[i])

return x3

print(add())