我想知道您将如何解释下面的函数以使用矩阵而不是向量输入,实质上,我只是在该列中找到所有超过某个值的所有值,然后将其相加并除以总行数即可得出比率。下面是矢量输入的工作原理,但我不太确定如何用矩阵输入完成输入。我应该改用logical
吗?
如果列数超过2,我选择的方法将不起作用,但我希望它可以容纳任何大小。
function Ratio = ratiovector(Vector)
N = numel(Vector);
c=0
for a = 1:N
if Vectors(a) >= 20
c=c + 1;
end
end
Ratio = c/N;
end
矩阵输入
function Ratio = ratiovector2(Matrix)
rows = Matrix(:,1)
columns = Matrix(:,2)
c = 0
d = 0
for a = 1:rows
for b =1:columns
if Matrix(a) >= 20
c= c + 1;
if Matrix(b) >= 20
d= d + 1;
end
end
Ratio = ?;
end
答案 0 :(得分:3)
对我来说,要如何标准化比率还不是很清楚,但是下面的函数是一个起点,它适用于矩阵和向量。它使用逻辑索引而不是for循环,这可能会具有更好的性能。
M = [0 1 2 5 22 ;
32 1 1 7 22 ;
10 10 10 10 20];
Ratio = ratiovector2(M)
function Ratio = ratiovector2(Matrix)
% This will give you a boolean matrix the same size of Matrix, with
% true values where Matrix elements are higher than 20
detected = Matrix > 20;
% The ratio is "how many are over 20 in each column"
Ratio = sum(detected) ./ size(Matrix,1);
end
如果您需要一个功能并且喜欢单线包装,请按以下步骤操作:
ratiovector3 = @(Matrix)sum(Matrix > 20) ./ size(Matrix,1);
Ratio = ratiovector3(M)
答案 1 :(得分:3)
您在注释中阐明,希望每列中的元素数超过阈值,超过矩阵中的行数。
这是一种快速的单线(阈值为20):
ratio = sum(M>20, 1) / size(M, 1);
打破这一点,我们有
M > 20; % logical array which is 1 where M > 20, 0 otherwise
sum(M > 20, 1); % column-wise sum of the logical
sum(M > 20, 1) / size(M,1) % Divide the sum by the number of rows to get ratio.
这将适用于任何列向量或矩阵。
示例:
M = [10, 15, 20, 100
21, 0, 21, 101
0, 0, 21, 102];
ratio = sum(M>20, 1) / size(M, 1);
% >> ratio = [0.333..., 0.0, 0.666..., 1.0] = [1/3, 0/3, 2/3, 3/3]