给定一个数组如:
A = [ 1 2 3 4 5 6 7 8 9 10]
我希望能够根据给定的百分比从数组中选择 n 元素,并将它们存储在新变量 B 中。如果它返回一个非整数个元素,我想向下舍入(即。floor )。因此,无论最后一个百分比是什么,它都会选择剩余的元素。
示例:
A = [1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1] % array to choose from
B = [0.3 0.48 0.22] % represents percentages in decimal form (summing to 1)
After evaluating the code, I'd like to have result:
C = [3 4 3] % note length(B) == length(C)
注意:虽然0.22 * 10 = 2.2,但前面的百分比仅选择10 +元素阵列中的3 + 4 = 7。因此,C的最后一个元素将采用
C(3) = length(A) - [ C(2) + C(1) ]
我的尝试:
Given A and B,
for i = 1:length(B)
if i == length(A) % if we're on last percentage, take whatever's left
C(i) = length(A) - sum(%OTHER ELEMENTS%)
end
C(i) = floor(B(i)*length(A(1))); % select percentage elements (round down)
end
我知道这不会完全奏效,但我似乎无法找到一种方法让它发挥作用。
如果这令人困惑,我道歉,我尽力解释。如果您有任何需要澄清的话,请不要犹豫!
答案 0 :(得分:1)
怎么样
encoded=$(urlencode_safe='/' urlencode "$data")
<强>解释强>
第一行将使C = floor(length(A)*B);
C(end) = length(A)-sum(C(1:end-1));
中的每个元素都正确,除了最后一个元素。第二个命令修复了C
的最后一个元素。
示例:强>
C
注意:根据>> A = [1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1];
>> B = [0.3 0.48 0.22];
>> C = floor(length(A)*B);
>> C(end) = length(A)-sum(C(1:end-1))
C =
3 4 3
的可能维度,您应该谨慎使用A
,因为length(A)
。考虑将length(A) == max(size(A))
替换为length(A)
。