python向量运算
① python 中 numpy 的(2,1)维列向量 为什么可以乘(2,2)维向量
numpy中直接用 * 即可表示数与向量的乘法,参考python 2.7的一个例子:
inport numpy as np
a = np.array([1,2,3,4]) # 向量
b = 5 # 数
print a*b
++++++++++++
[5,10,15,20]
② Python 里面向量该怎样运算
首先要写上这一句:
from numpy import *
(写上这句的前提也得你已经安了numpy)
(1) 定义一个零向量(4维):
>>>a=zeros(4)
>>>a
array([0.,0.,0.,0.])
定义一个List:
b=[1,2,3,4]
(2)向量可直接与List相加:
>>>c=a+b
>>>c
array([1.,2.,3.,4.])
(3)要给向量里每个元素都乘以同一个数:
>>>d=b*[3]
或者:
>>>c=3
>>>d=b*[c]
>>>d
array([3.,6.,9.,12.])
而不能是d=b*3,即要乘的这个数字得是个List形式
(4)两个向量相除(对应元素相除):
>>>e=[3,2,3,4]
>>>f=d/e
>>>f
array([1.,3.,3.,3.])
③ 使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘
#--coding:gb2312--
classvector3:
def__init__(self,x_=0,y_=0,z_=0):#构造函数
self.x=x_
self.y=y_
self.z=z_
def__add__(self,obj):#重载+作为加号
returnvector3(self.x+obj.x,self.y+obj.y,self.z+obj.z)
def__sub__(self,obj):#重载-作为减号
returnvector3(self.x-obj.x,self.y-obj.y,self.z-obj.z)
def__mul__(self,obj):#重载*作为点乘
returnvector3(self.x*obj.x,self.y*obj.y,self.z*obj.z)
def__pow__(self,obj):#重载**作为叉乘。不好,偏离了常理上的意义,可以考虑重载其他符号,或者直接写函数。
returnvector3(self.y*obj.z-obj.y*self.z,self.z*obj.x-self.x*obj.z,self.x*obj.y-obj.x*self.y)
def__str__(self):#供print打印的字符串
returnstr(self.x)+','+str(self.y)+','+str(self.z)
v1=vector3(1,2,3)
v2=vector3(0,1,2)
printv1+v2
printv1-v2
printv1*v2
printv1**v2
结果:
④ python多个向量怎么聚合成一个向量
将向量相加,然后除以总数,得出中心点,过来另一个向量,计算距离就可以了。
如果你想说的是KMeans这种聚类方法的话,简单给你介绍一下:
类别
聚类算法 非监督学习算法
参数
k值 : 分成的类的数量
距离公式 : 计算距离
阀值 : 距离大于阀值要重新计算
算法详细
step 1 : 随机选取k个点作为簇团中心点
step 2 : 将元数据中各数据划分到距离最近的一个中心点所对应的簇团中
step 3 : 重新计算出各簇团的中心点,再将元数据中各数据划分到距离最近的一
个中心点所对应的簇团中
step 4 : 重新计算中心点,计算中心点与前回中心点的距离,如果距离大于阀值,
跳到step3,否则结束
⑤ python中向量指的是什么意思
一、向量是什么
在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(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学习网,欢迎在线学习!
⑥ 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)
⑦ Python中怎样计算两个向量的内积
这是从物理实践中来,在物理计算中,经常会用到一个向量投影到另一个向量的方向,然后再乘以另一个向量的模.而且这样的算法表示固定的物理意义.由于经常会遇到这种问题,于是有人就这样定义了内积,是为了便于书写和直观辨认.一个式子太长或太复杂就会给计算带来很多的不便,定义了简便的式子有助有从数学上理解物理.至于为什么两个向量的内积是常数,这就是定义,定义成常数罢了.内积的公式还是很简单的,外积的就复杂得多.
⑧ python 中的向量怎么表示
可以用numpy 库
np.mat([[a],[b],[c]])
表示一个3*1 列向量 (a,b,c)^T
⑨ python方向向量要怎么表示
向量本身属于矢量,有大小也有方向,大小就称为向量的模,向量的方向就是指坐标原点到该向量坐标点的方向。比如向量A=(m,n)。 向量符号是在英文字母的上方加一个箭头符号。用域功能也可以很容易实现这个要求。 在大括号中输入域代码“eq \o(→,a...
⑩ python的例题解法
不看numpy一维数组的话,就是len相同的一个列表相同索引值相加吧。
x1=[1,2,3]
x2=[4,5,6]
x3=[]
defadd():
foriinrange(0,len(x1)):
x3.append(x1[i]+x2[i])
returnx3
print(add())