【问题标题】:How do I calculate the dot product between one vector and a list of vectors?如何计算一个向量和向量列表之间的点积?
【发布时间】:2020-12-03 10:15:03
【问题描述】:

我有一个向量和矩阵 H 的特征向量,我想在 V1 上找到数组中每个向量的点积。

我想将向量 PhiZero 与为 H 计算的每个特征向量相乘

import numpy as np
import scipy.linalg as la
import math
import networkx as nx

Alpha = []
n=3
p=0.5
G = nx.gnp_random_graph(n,p) 
A = nx.to_numpy_matrix(G)
w = np.zeros(shape=(n,n))
w[1,2] = 1
gamma = 1/(n*p)
H = (-w) - (gamma * A)

我在 w 中选择了一个随机位置,

evals, evecs = la.eig(H)
PhiZero = np.reciprocal(math.sqrt(n)) * np.ones((n,1), dtype=int)

我尝试了两种方法,第一种方法,我得到一个 3x3 矩阵

Alpha = np.dot(PhiZero.transpose(), evecs)

另一种方式,我用for循环尝试:

for y in evecs:
    alphaJ = np.dot(PhiZero.transpose(), evecs) 
    Alpha.append(alphaJ)

我采用了转置 PhiZero 以使尺寸与 evecs (1x3 & 3x1) 对齐

【问题讨论】:

  • 你能提供代码来生成一个典型的 w 吗?值无关紧要,尺寸无关紧要。

标签: python networkx eigenvector


【解决方案1】:

在您的第二种方法中,您应该没有:

alphaJ = np.dot(PhiZero.transpose(), y)

而不是

alphaJ = np.dot(PhiZero.transpose(), evecs) ?

如果我尝试您的第一个示例,它会起作用:

import numpy as np
import scipy.linalg as la
import math
import networkx as nx

Alpha = []
n=3
p=0.5
G = nx.gnp_random_graph(n,p) 
A = nx.to_numpy_matrix(G)
w = np.zeros(shape=(n,n))
w[1,2] = 1
gamma = 1/(n*p)
H = (-w) - (gamma * A)

evals, evecs = la.eig(H)
PhiZero = np.reciprocal(math.sqrt(n)) * np.ones((n,1), dtype=int)

Alpha = np.dot(PhiZero.transpose(), evecs)

print(Alpha)

给予

[[ 0.95293215 -0.32163376  0.03179978]]

如果你运行这个,你确定你得到一个 3x3 吗?

【讨论】:

  • 我认为我们确实需要查看 w 和 gamma 以进一步提供帮助。目前我在猜测它们的形状。
  • 我都加了,w中1的位置是任意的
  • 查看我的答案的编辑 - 我得到一个 1x3 ndarray。不是吗?
  • 是的,你是对的,我试图添加 evecs[i] 希望它可以一次计算每个。感谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 2017-10-30
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多