【问题标题】:Build a vector from a list of indices从索引列表构建向量
【发布时间】:2015-04-30 16:40:54
【问题描述】:

我正在为一个类的最终项目实现NNLS algorithm,并且我试图找到一种优雅的方法来从现有向量 w 和索引列表 P 构建新向量 w'。我笨拙的解决方案如下所示。

function [w_prime] = vector_from_indices[w, P]
w_prime = zeros(numel(P));
for i = 1:numel(P)
    w_prime(i) = w(P(i));
end
end

有没有办法优雅地排成一行或更有效地做到这一点?我是一名 CS 专业的学生,​​正在修读更高级别的数学课程,所以我想我会将严格的程序美学应用到我的最终项目中:)

新问题:

function [a] = minimizer(P, d, s)
a = d(P(1))/(d(P(1)) - s(P(1)));
for i =1:numel(P)
    if a > d(P(i))/(d(P(i)) - s(P(i)))
        a = d(P(i))/(d(P(i)) - s(P(i)));
    end
end
end

>> P 
P =
     1     3     4
>> d 
d =
    0.4387
    0.3816
    0.7655
    0.7952
    0.1869
>> s
s =
    0.4898
    0.4456
    0.6463
    0.7094
    0.7547
>> a = minimizer(P,d,s)
a =
   -8.5995
>> d(1)/(d(1) - s(1))
d(3)/(d(3) - s(3))
d(4)/(d(4) - s(4))
ans =
   -8.5995
ans =
    6.4219
ans =
    9.2643
>> b = min(d(P)/(d(P) - s(P)))
b =
         0    3.6806         0
>> d(P)/(d(P) - s(P))

ans =

         0    3.6806         0
         0    6.4219         0
         0    6.6709         0

我创建了一个函数,可以最小化 P 中索引的 d/(d-s) 值。有没有办法使用 MATLAB 的内置功能找到最小化?显然,单行表达式(我分配给 b 的地方)不起作用,我想我明白为什么;它正在生成一个 3x3 矩阵,其中包含 d 和 s 上 P 中索引的所有排列,并且只是找到最小行(可能通过一个范数,但可能只是通过行和)。有没有表现得像函数的表达式?

【问题讨论】:

  • 谢谢,这正是我所需要的。
  • 好的,更新问题!需要一种新的优雅应用。
  • aaa 并回答了我自己的问题。

标签: matlab linear-algebra


【解决方案1】:

对于编辑 2,有一个元素除法运算符和一个向量除法运算符。 b = d(P)./(d(P) - s(P)) (带点)是我需要的。

【讨论】:

    【解决方案2】:

    正如 Divakar 指出的那样,解决方案是 w(P)。谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2020-10-25
      • 2019-04-28
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2020-07-05
      相关资源
      最近更新 更多