【问题标题】:Computing the unit vectors of high-dimensional matrix计算高维矩阵的单位向量
【发布时间】:2015-11-12 09:46:12
【问题描述】:

我想计算一个高维矩阵的单位向量。

eig_vectors=(eig_vectors/sqrt(eig_vectors'*eig_vectors));


K>> size(eig_vectors)

ans =

         400      153600

由于eig_vectors'*eig_vectors,它遇到了内存问题。有什么快速实现的方法?

【问题讨论】:

  • 您不应该寻找解决内存问题并询问如何解决它而不是跳到使其更快吗?
  • @Divakar 感谢您的回复!是的,内存问题是第一要务。
  • 所以,请具体说明问题。就目前而言,它太宽泛了。
  • 你确定你的范数公式是正确的吗?我是否正确地假设您想将每个向量除以其 2 范数?
  • @Jonas 哦!是的,你是对的。

标签: matlab matrix vectorization


【解决方案1】:

可以通过直接对矩阵元素的平方求和来计算范数,从而避免了大矩阵乘法。

eig_vectors = bsxfun(@rdivide,eig_vectors,sqrt(sum(eig_vectors.^2,2)))

如果这仍然是您的内存问题,您可以随时使用循环

   for iVector = 1:size(eig_vectors,1)
        eig_vectors(iVector,:) = eig_vectors(iVector,:)./norm(eig_vectors(iVector,:));
   end

【讨论】:

  • 该代码产生的数字与问题中的代码不同。
  • @Daniel:确实如此。目前,我假设 OP 想要将每个向量除以它的 2 范数,并且在他们的代码中犯了一个错误:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多