如何根据MATLAB中给定的百分比从二维数组中选择元素数?

时间:2016-05-18 19:10:04

标签: arrays matlab

给定一个数组如:

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

我知道这不会完全奏效,但我似乎无法找到一种方法让它发挥作用。

如果这令人困惑,我道歉,我尽力解释。如果您有任何需要澄清的话,请不要犹豫!

1 个答案:

答案 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)