Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在scipy中使用tracedot执行一系列外部产品_Python_Numpy_Scipy_Linear Algebra - Fatal编程技术网

Python 在scipy中使用tracedot执行一系列外部产品

Python 在scipy中使用tracedot执行一系列外部产品,python,numpy,scipy,linear-algebra,Python,Numpy,Scipy,Linear Algebra,要在Python中的两个向量(scipy/numpy)之间执行外积,可以使用outer函数,也可以像下面这样简单地使用dot: In [76]: dot(rand(2,1), rand(1,2)) Out[76]: array([[ 0.43427387, 0.5700558 ], [ 0.19121408, 0.2509999 ]]) 现在的问题是,假设我有一个向量列表(或两个列表…),我想计算所有的外积,创建一个方阵列表。我怎样才能轻松做到这一点?我相信tensordo

要在Python中的两个向量(scipy/numpy)之间执行外积,可以使用outer函数,也可以像下面这样简单地使用dot:

In [76]: dot(rand(2,1), rand(1,2))
Out[76]: 
array([[ 0.43427387,  0.5700558 ],
       [ 0.19121408,  0.2509999 ]])
现在的问题是,假设我有一个向量列表(或两个列表…),我想计算所有的外积,创建一个方阵列表。我怎样才能轻松做到这一点?我相信tensordot能够做到这一点,但是如何做到呢?

第三种(也是最容易概括的)计算外积的方法是通过广播

一些3矢量(行上的矢量):

外部产品:

from numpy import newaxis
xy = x[:,:,newaxis] * y[:,newaxis,:]

# 10th matrix
print xy[10]
print np.outer(x[10,:], y[10,:])

实际上是pv提供的答案。不正确,因为生成的xy阵列将具有形状(100,3,3)。 正确的广播方式如下:

import numpy as np
from numpy import newaxis
x = np.random.randn(100, 3)
y = np.random.randn(100, 3)

xy =  x[:,newaxis, :,newaxis] * y[newaxis,:,newaxis,:] 
生成的xy阵列现在为形状(100100,3,3),并包含x和y中所有3向量对的叉积:

for i,a in enumerate(x):
    for j,b in enumerate(y):
        if not np.alltrue(np.outer(a,b) == xy[i,j]): print("The code is wrong")

不提供输出:)

如果列表很大,请查看PyTables:您需要计算外积列表,还是只计算它们的和(或其他属性)?@dividebyzero:
创建方阵列表
真的是您的最终目标吗?你能更具体地说明你的目标吗?Thanks@Paulo它们不是很大的列表。。。大约1000个元素。我要找的是最快最简单的计算方法。@Jeremiah我需要这个列表。。。我所做的是从一个图像中计算所谓的结构张量,仅仅是一行图像。这是一个梯度向量的列表,我需要每个向量的外积。稍后我会在三个图像通道上添加其中的一部分,以及顶部和底部线条。但是结果仍然是一个2x2矩阵的列表,图像行的每个像素一个。谢谢你,我不知道这个!。。。但我仍然在寻找一个tensordot实现,以便比较速度!
for i,a in enumerate(x):
    for j,b in enumerate(y):
        if not np.alltrue(np.outer(a,b) == xy[i,j]): print("The code is wrong")