matlab将矩阵按比例筛选,matlab – 在矩阵中查找比例列

如果通过除以最大值来标准化每列,则比例变为相等.这使问题更容易.

现在,为了测试相等性,可以在列上使用单个(外部)循环;内部循环很容易用bsxfun进行矢量化.要获得更高的速度,请仅将每列与其右侧的列进行比较.

同样为了节省一些时间,结果矩阵被预先分配到一个近似大小(您应该设置它).如果大概的大小是错误的,唯一的惩罚将是速度稍慢,但代码工作.

像往常一样,浮点值之间的相等性测试应该包括容差.

结果以2列矩阵(S)给出,其中每行包含两行成比例的索引.

A = [1 5 2 6 3 1

2 5 4 7 6 1

3 5 6 8 9 1]; %// example data matrix

tol = 1e-6; %// relative tolerance

A = bsxfun(@rdivide, A, max(A,[],1)); %// normalize A

C = size(A,2);

S = NaN(round(C^1.5),2); %// preallocate result to *approximate* size

used = 0; %// number of rows of S already used

for c = 1:C

ind = c+find(all(abs(bsxfun(@rdivide, A(:,c), A(:,c+1:end))-1)

u = numel(ind); %// number of columns proportional to column c

S(used+1:used+u,1) = c; %// fill in result

S(used+1:used+u,2) = ind; %// fill in result

used = used + u; %// update number of results

end

S = S(1:used,:); %// remove unused rows of S

在这个例子中,结果是

S =

1 3

1 5

2 6

3 5

意思是第1列与第3列成比例;第1列与第5列等成比例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值