Image 在matlab中绘制稀疏矩阵
我想在Image 在matlab中绘制稀疏矩阵,image,matlab,plot,sparse-matrix,Image,Matlab,Plot,Sparse Matrix,我想在imagesc类型的样式中绘制一个稀疏矩阵(每个像素一种颜色,而不是分散的符号)。矩阵由分散在10000x1000平方上的斑点组成。我预计大约有100个斑点,每个斑点为50x100像素。这个矩阵太大了,放大或缩小或在其中移动以检查数据变得非常滞后。我仍然想保持这个决心。是否有任何方法可以绘制一个稀疏矩阵,它只绘制斑点,并将colormap的“零颜色”作为背景,而不占用内存中的任何空间 假设我们有一个矩阵M,看起来像这样: [1, 2, 1, 0; 0, 1, .4, 0; 0, 0,
imagesc
类型的样式中绘制一个稀疏矩阵(每个像素一种颜色,而不是分散的符号)。矩阵由分散在10000x1000平方上的斑点组成。我预计大约有100个斑点,每个斑点为50x100像素。这个矩阵太大了,放大或缩小或在其中移动以检查数据变得非常滞后。我仍然想保持这个决心。是否有任何方法可以绘制一个稀疏矩阵,它只绘制斑点,并将colormap的“零颜色”作为背景,而不占用内存中的任何空间
假设我们有一个矩阵M,看起来像这样:
[1, 2, 1, 0;
0, 1, .4, 0;
0, 0, 0, 0;
0, 7, 0, 0]
当我把它画成稀疏矩阵时
figure;
imagesc(sparse(M));
它的大小与省略sparse命令相同。这就是我想要回避的 您可以只绘制其非零值,而不是将矩阵视为图像。使用(而不是
plot
)可以将颜色作为值的函数,如imagesc
中所示
默认情况下,scatter
将背景保留为白色,因此您必须对其进行调整。这分两步完成:确保散射
的颜色缩放将colormap的第一种颜色指定为值0;然后手动将轴的背景设置为该颜色
不过,我还没有测试这是否占用更少的内存
%// Generate example matrix
M = 10000*rand(1000);
M(M>100) = 0;
M = sparse(M); %// example 1000x1000 matrix with ~1% sparsity
%// Do the plot
cmap = jet; %// choose a colormap
s = .5; %// dot size
colormap(cmap); %// use it
[ii, jj, Mnnz] = find(M); %// get nonzero values and its positions
scatter(1,1,s,0) %// make sure the first color corresponds to 0 value.
hold on
scatter(ii,jj,s,Mnnz); %// do the actual plot of the nonzero values
set(gca,'color',cmap(1,:)) %// set axis backgroud to first color
colorbar %// show colorbar
注意:轴的方向可能不同于imagesc
您可以只绘制其非零值,而不是将矩阵视为图像。使用(而不是
plot
)可以将颜色作为值的函数,如imagesc
中所示
默认情况下,scatter
将背景保留为白色,因此您必须对其进行调整。这分两步完成:确保散射
的颜色缩放将colormap的第一种颜色指定为值0;然后手动将轴的背景设置为该颜色
不过,我还没有测试这是否占用更少的内存
%// Generate example matrix
M = 10000*rand(1000);
M(M>100) = 0;
M = sparse(M); %// example 1000x1000 matrix with ~1% sparsity
%// Do the plot
cmap = jet; %// choose a colormap
s = .5; %// dot size
colormap(cmap); %// use it
[ii, jj, Mnnz] = find(M); %// get nonzero values and its positions
scatter(1,1,s,0) %// make sure the first color corresponds to 0 value.
hold on
scatter(ii,jj,s,Mnnz); %// do the actual plot of the nonzero values
set(gca,'color',cmap(1,:)) %// set axis backgroud to first color
colorbar %// show colorbar
注意:轴的方向可能不同于imagesc
有趣的问题!还有,关于你的名字:你从事声音工程吗?@LuisMendo-这绝对是一个音频信号处理的参考资料!我喜欢作曲、演奏和录制音乐!当然,我也倾向于使用Matlab:-)@rayryengYes这是一个合理的工程参考:)有趣的问题!还有,关于你的名字:你从事声音工程吗?@LuisMendo-这绝对是一个音频信号处理的参考资料!我喜欢作曲、演奏和录制音乐!当然,我也倾向于使用Matlab:-)@rayryengYes这是一个良好的工程参考:)谢谢你的回答!我正在重新构造您的代码,以便它对所有非零像素执行实际的imagesc命令。我需要它是每个像素的一个固定正方形,因为我在所有东西的上面绘制其他东西。我对所有非零元素在imagesc上循环,但绘图需要花费很长时间,因此我将尝试隔离斑点,并逐个或更智能地绘制它们。我预计大约有100个斑点,每个斑点为50x100像素。我正在更新这个问题。如果这是一个实质性的改变,发布一个新的问题可能会更好。只是我需要它以一种imagesc类型的样式(每个像素一种颜色)绘制,而不是用一个散点符号。但结果在视觉上是一样的。
scatter
中的那些符号太小,无法与pixelsBTW区分-您可以使用SPRAND直接以稀疏形式生成示例矩阵…感谢您的回答!我正在重新构造您的代码,以便它对所有非零像素执行实际的imagesc命令。我需要它是每个像素的一个固定正方形,因为我在所有东西的上面绘制其他东西。我对所有非零元素在imagesc上循环,但绘图需要花费很长时间,因此我将尝试隔离斑点,并逐个或更智能地绘制它们。我预计大约有100个斑点,每个斑点为50x100像素。我正在更新这个问题。如果这是一个实质性的改变,发布一个新的问题可能会更好。只是我需要它以一种imagesc类型的样式(每个像素一种颜色)绘制,而不是用一个散点符号。但结果在视觉上是一样的。“散布”中的符号太小,无法与像素SBTW区分-您可以使用SPRAND直接以稀疏形式生成示例矩阵。。。