【问题标题】:How would I find the top 10 values of a row every 100 values?如何每 100 个值找到一行的前 10 个值?
【发布时间】:2020-06-01 12:41:23
【问题描述】:

所以我有一个 1 x 7000 矩阵,我想找到每 100 个“样本”值组的前 10 个值,并将所有其他值替换为零。

我有一个代码可用于查找整行的前 10 个值:

[sortvals, sortidx] = sort(A,2,'descend');
B = zeros(size(A),classA));
for K = 1 : size(A,1)
    B(K,sortidx(K,1:10)) = sortvals(K,1:10);
end

但我想不出如何为每 100 个值实现这一点,除了可能是一种粗暴的拆分方法,找到值,然后追加,但这似乎不必要的混乱。

【问题讨论】:

  • 矩阵 ix 1x7000。 每 100 个“样本”值组是什么意思?另外,如果A 是 1x7000,for K = 1 : size(A,1) 的用途是什么?

标签: matlab sorting matrix


【解决方案1】:

ReshapeA 放入一个有 100 行的矩阵(并相应地调整列),然后应用maxk 来查找每列的前 10 个元素的索引。将这些转换为A 的线性索引并提取这些索引处的元素。

%Extract top 10 values in every 100 values
top = 10;   every = 100;
%Reshape into a 100*x matrix
tmp =  reshape(A, every, []);
%Find row subscripts of required max values
[~, ind] = maxk(tmp,top);
%Convert row subscripts to linear indices
LinIdx = (0:every:(size(tmp,2)-1)*every) + ind;
%Initialize a matrix with all zeros of the same size and class as that of A
B = zeros(size(A), classA);
%Insert the top values 
B(LinIdx) = A(LinIdx);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多