gpt4 book ai didi

matlab - 计算矩阵列中数字的同时出现 - MATLAB

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:16 27 4
gpt4 key购买 nike

我有一个矩阵 (A) 的形式(实际上要大得多):

205   204   201
202 208 202

我怎样才能逐列计算数字的同时出现,然后将其输出到矩阵?

我希望最终矩阵从 min(A):max(A)(或能够指定特定范围)跨越顶部和侧面运行,并计算其中数字的同时出现每一列。使用上面的例子:

    200 201 202 203 204 205 206 207 208
200 0 0 0 0 0 0 0 0 0
201 0 0 1 0 0 0 0 0 0
202 0 0 0 0 0 1 0 0 0
203 0 0 0 0 0 0 0 0 0
204 0 0 0 0 0 0 0 0 1
205 0 0 0 0 0 0 0 0 0
206 0 0 0 0 0 0 0 0 0
207 0 0 0 0 0 0 0 0 0
208 0 0 0 0 0 0 0 0 0

(不需要矩阵标签)

两个要点:计数必须是非重复的,并且按数字顺序进行。例如,一列包含:

205
202

会将此记为 202 与 205 一起出现(如上矩阵所示),但不是 205 与 202 一起出现 - 重复倒数。在决定用什么数字作为引用时,应该是最小的。

编辑:

enter image description here

最佳答案

sparse来救援!

让你的数据和期望的范围定义为

A = [ 205   204   201
202 208 202 ]; %// data. Two-row matrix
limits = [200 208]; %// desired range. It needn't include all values of A

然后

lim1 = limits(1)-1;
s = limits(2)-lim1;
cols = all((A>=limits(1)) & (A<=limits(2)), 1);
B = sort(A(:,cols), 1, 'descend')-lim1;
R = full(sparse(B(2,:), B(1,:), 1, s, s));

给予

R =
0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

或者,您可以放弃 sort 并使用矩阵加法,然后使用 triu 来获得相同的结果(可能更快):

lim1 = limits(1)-1;
s = limits(2)-lim1;
cols = all( (A>=limits(1)) & (A<=limits(2)) , 1);
R = full(sparse(A(2,cols)-lim1, A(1,cols)-lim1, 1, s, s));
R = triu(R + R.');

这两种方法都处理重复的列(直到排序),正确地增加它们的计数。例如,

A = [205   204   201
201 208 205]

给予

R =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

关于matlab - 计算矩阵列中数字的同时出现 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com