稀疏矩阵图matlab

时间:2013-04-18 06:37:36

标签: image matlab image-processing matrix plot

我有一个5000 * 5000的稀疏矩阵,有4个不同的值。我想用4种不同颜色可视化非零元素,这样我就可以识别出这些值与它们之间关系的比例,我使用 imagesc ,但我不能很好地认识到不同的值,尤其是比较小的值。我想如果我为每个值使用一些符号,它可以工作,但我不知道它是如何在Matlab中。有什么建议吗? Dan代码的结果如下图所示。

results of about 5000*5000 result of 1000*1000 block of 5000*5000 matrix

2 个答案:

答案 0 :(得分:2)

您可以将矩阵重构为一组[X,Y,F]坐标(重新使用Resampling Matrix and restoring in one single Matrix的答案):

假设您的矩阵为M

[X, Y] = meshgrid(1:size(M,1), 1:size(M,2));
Mf = M(:); %used again later, hence stored
V = [X(:), Y(:), Mf];

摆脱零元素

V(Mf == 0, :) = [];

此时,如果您可以访问统计工具箱,只需转到gscatter(V(:,1), V(:,2), V(:,3))即可获得正确的情节,否则如果您没有工具箱,请继续执行以下操作:

在M

中查找唯一值的列表
Vu = unique(V(:,3));

对于每个这样的值,将点绘制为xy散点图,注意保持全部确保每次添加新绘图时颜色都会更改,即循环的每次新迭代

hold all;
for g = 1:length(Vu)
    Vg = V(V(:,3)==Vu(g),:)
    plot(Vg(:,1), Vg(:,2), '*');
    a{g}=num2str(Vu(g));
end
legend(a);

示例M

M = zeros(1000);
M(200,30) = 7;
M(100, 900) = 10;
M(150, 901) = 13;
M(600, 600) = 13;

结果:

enter image description here

答案 1 :(得分:0)

现在我可以回答问题的第一部分。我想你需要做一些像

这样的事情

sum(histc(A, unique(A)),2)

计算矩阵中唯一值的数量。

temp = histc(A, unique(A))“是列直方图计数的矩阵。”因此,您可以获得{A}中出现的所有unique(A)值的计数。

我正在stat = sum(temp,2)来计算整个矩阵中unique(A)的所有值的计数。

然后,您可以使用@Dan中提出的代码来可视化结果。

hold all; 
u=unique(A);
for i = 1:length(stat) 
plot(u(i), stat(i)/max(stat), '*');
end

请说明这些价值观之间的关系是什么意思?