Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在matlab中绘制稀疏矩阵_Image_Matlab_Plot_Sparse Matrix - Fatal编程技术网

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直接以稀疏形式生成示例矩阵。。。