我有两个相同大小p x n
的稀疏矩阵“Matrix1”和“Matrix2”。
通过稀疏矩阵,我的意思是它包含许多正好为零的元素。
我想在同一个色彩图和唯一的颜色条下显示两个矩阵。在MATLAB中这样做很简单:
bottom = min(min(min(Matrix1)),min(min(Matrix2)));
top = max(max(max(Matrix1)),max(max(Matrix2)));
subplot(1,2,1)
imagesc(Matrix1)
colormap(gray)
caxis manual
caxis([bottom top]);
subplot(1,2,2)
imagesc(Matrix2)
colormap(gray)
caxis manual
caxis([bottom top]);
colorbar;
我的问题:
事实上,当我使用imagesc(Matrix)
显示矩阵时,它可以忽略使用imagesc(10*log10(Matrix))
时始终显示的噪音(或背景)。
这就是为什么我要展示矩阵的10*log10
。但在这种情况下,最小值将为-Inf
,因为矩阵是稀疏的。在这种情况下,caxis
会出错,因为底部等于-Inf
。
你有什么建议我?如何修改上述代码?
非常感谢任何帮助!
答案 0 :(得分:1)
非常重要的一点是,矩阵中的最小值始终为0
。利用这一点,解决问题的一种非常简单的方法是在日志操作中添加1
,以便映射到原始矩阵中0
的值也映射到0
log
1}}操作。这可以避免您遇到的-Inf
错误。事实上,如果您愿意,这是一种可视化傅里叶变换的常用方法。将1
添加到对数可确保变换在输出中没有负值,但导数或其变化率保持不变,因为效果只是将1
单位的曲线转换为左
因此,只需执行imagesc(10*log10(1 + Matrix));
,然后最小值始终位于0
,而最大值无限制但受Matrix
中最大值的限制。