1

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

结果约5000*50005000*5000 矩阵的 1000*1000 块的结果

4

2 回答 2

2

您可以将矩阵改造成一组 [X, Y, F] 坐标(重新使用我从Resampling Matrix 得到的答案并在一个 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;

结果:

在此处输入图像描述

于 2013-04-18T06:59:08.343 回答
0

现在我可以回答问题的第一部分了。我想你需要做类似的事情

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

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

temp = histc(A, unique(A))“是列直方图计数的矩阵。” unique(A)因此,您将获得出现在 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

请澄清你的意思是价值观之间的什么样的关系?

于 2013-04-18T07:37:40.617 回答