python - 多次运行的矩阵归一化,这段代码有什么作用?
问题描述
我在一段时间内收集了几个 numpy 矩阵。我现在想可视化这些矩阵并探索它们之间的视觉相似性。矩阵包含从 0.0 到 1.0 的小数字。
为了比较它们,我想确保相同的“区域”用相同的颜色着色,例如 0.01 到 0.02 始终是红色,而 0.02 到 0.03 始终是绿色。我有两个问题:
我发现了另一个包含此代码段的问题:
a = np.random.normal(0.0,0.5,size=(5000,10))**2
a = a/np.sum(a,axis=1)[:,None] # Normalize
plt.pcolor(a)
第二行的效果是什么,正是[:,None]
语句。我尝试通过以下方式标准化矩阵:
max_a = a/10# Normalize
print(max_a.shape)
plt.pcolor(max_a)
但与非归一化矩阵的可视化相比,视觉差异不大。然后,当我添加[:,None]
语句时,出现错误
ValueError: too many values to unpack (expected 2)
这是预期的,因为现在的形状是10,1,10
。因此,我想知道括号的作用以及如何阅读该声明。
其次,相关的,我想确保我可以直观地比较矩阵。因此,我想修复“着色”,例如颜色为绿色或红色时的范围,这样我最终不会在情节 A 中以 0 到 0.1 作为绿色,在情节 B 中以 0 到 0.1 作为红色。我修复了从浮动到颜色的“翻译”?我是否必须用相同的常数(例如 10)对每个矩阵进行归一化?或者我是否用一个独特的值对它们进行规范化——我什至需要在这里进行规范化吗?
解决方案
[:,None]
添加新轴,因此您可以将每行中所有列的总和相除 - 它与使用相同np.sum(a,axis=1)[:,np.newaxis]
- 当您对所有列求和时,np.sum(a,axis=1)
您将获得具有 shape 的 1d 数组(5000)
,但能够使用求和列,您需要形状为 2d 数组(5000,1)
,这就是需要新轴的原因。
您可以通过固定颜色图的比例来固定颜色:plt.pcolor(max_a,vmin=0,vmax=1)
添加离散颜色条也可能有帮助:
from pylab import cm
cmap = cm.get_cmap('jet', 10)
plt.pcolor(a,cmap=cmap,vmin=0,vmax=1)
plt.colorbar()
推荐阅读
- windows - 重启windows ce 6.0后如何在字体文件夹中保存字体
- apache - Apache2 服务器重启失败 - 尝试了多个选项
- linux - Linux EC2 中的 /etc/environment
- python - 循环列表列表以生成要导入的模块
- javascript - 电子邮件成功发送,我收到了邮件,但按钮和表单的状态没有变化
- python - 无法在 spark 独立集群上完成 spark 作业
- macos - 如何检测 Mac 应用中的 VoiceOver 状态变化
- java - AWT 图形未正确翻译
- nginx - 如何使用特定端口从外部访问 nginx 服务器
- regex - 使用正则表达式从 DF 中提取完全匹配