从索引列表构建向量
Build a vector from a list of indices
我正在为 class 的最终项目实施 NNLS algorithm,我正在尝试找到一种从现有向量构建新向量 w' 的优雅方法w 和索引列表 P。我笨拙的解决方案如下所示。
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 矩阵,其中包含 P 中 d 和 s 上的所有索引排列,并且只是找到最小行(可能通过范数,但可能只是采用行总和)。有没有表现得像函数的表达式?
正如 Divakar 指出的那样,解决方案是 w(P)。谢谢!
对于编辑 2,有一个元素级除法运算符和一个向量级除法运算符。
b = d(P)./(d(P) - s(P)) (带点)是我所需要的。
我正在为 class 的最终项目实施 NNLS algorithm,我正在尝试找到一种从现有向量构建新向量 w' 的优雅方法w 和索引列表 P。我笨拙的解决方案如下所示。
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 矩阵,其中包含 P 中 d 和 s 上的所有索引排列,并且只是找到最小行(可能通过范数,但可能只是采用行总和)。有没有表现得像函数的表达式?
正如 Divakar 指出的那样,解决方案是 w(P)。谢谢!
对于编辑 2,有一个元素级除法运算符和一个向量级除法运算符。 b = d(P)./(d(P) - s(P)) (带点)是我所需要的。