我有一个关于我的剧本的问题,我希望你的帮助或任何想法来解决我的问题。在
我有一个二维数组的数据,我想把它除以另一个二维数组。到目前为止,这不是问题。 但我提出了一个条件:这两个数组都必须考虑二进制掩码,并且只取像素=1。在
我写道:
fig10, (ax1, ax2, ax3) = plt.subplots(1,3)
fig = plt.gcf()
fig.set_size_inches(16, 9)
# ARRAYS TAKE ACCOUNT PIXEL = 1 IN THE BINARY GRID
convolution_mask_locale_data = convolution_mask_locale[grid.T == 1]
convolution_mask_grande_data = convolution_mask_grande[grid.T == 1]
convolution_locale_data = convolution_locale[grid.T == 1]
convolution_grande_data = convolution_grande[grid.T == 1]
# FIRST STEP DIVIDE
step1 = convolution_locale_data / convolution_mask_locale_data
fig_step1 = ax1.imshow(step1, interpolation='nearest')
fig10.colorbar(fig_step1,ax=ax1)
ax1.set_xlabel("X (arcmin)")
ax1.set_ylabel("Y (arcmin)")
# SECOND STEP DIVIDE
step2 = convolution_grande_data / convolution_mask_grande_data
fig_step2 = ax2.imshow(step2, interpolation='nearest')
fig10.colorbar(fig_step2,ax=ax2)
ax2.set_xlabel("X (arcmin)")
ax2.set_ylabel("Y (arcmin)")
# SUBSTRACT BOTH RESULTS
S_N_map = step1 - step2
fig_S_N_map = ax3.imshow(S_N_map, interpolation='nearest')
fig10.colorbar(fig_S_N_map,ax=ax3)
ax3.set_xlabel("X (arcmin)")
ax3.set_ylabel("Y (arcmin)")
fig10.tight_layout()
fig10.savefig(outname10)
但我有个问题:最后,我需要得到和热图一样的东西。但是当我用grid.T条件处理数组时,我的2D数组变成了1D数组,我不能进行操作。在
你知道我该怎么处理吗? 也许不太清楚,我很抱歉我的英语很差。在
谢谢你!在
编辑:
变量grid.T是一个二进制数组(0或1),它指示像素中是有星星(值1)还是什么都没有(值0)。在
变量卷积_mask_local表示前一个由高斯卷积的网格.T。它也是一个二维数组
OliverW的解决方案。:
当我用OliverW给出的解决方案更新脚本时,我得到了:
^{pr2}$我得到了这些情节(第二个情节似乎很好,但第一个情节却因未知原因而不适用):
您似乎对可视化二维数组感兴趣,其中有些元素可以忽略(屏蔽)。在
幸运的是,这个功能存在于numpy(numpy's masked arrays)下,matplotlib也可以使用它们。在
下面是一个例子:
注意掩码数组
B
和C
如何保持其2D形状,而逻辑索引数组(b/c)[~mask]
获得了1D形状。这是正常的,而且由于索引的工作方式:numpy不能预先知道逻辑索引数组是否可以用跨步表示(一般来说,它不能),所以它会使数组变平。但是,使用掩码数组,您可以继续按照您习惯的方式工作。掩码在操作之间保留,正如您从最后两行代码中看到的,相同的值在2D数组中。在最后,您可以可视化蒙版数组。打电话给:
^{pr2}$它将显示一个3x3网格,其中一些值被屏蔽(在我的例子中,这意味着它们是透明的,在白色背景下会产生白色像素)。在
相关问题 更多 >
编程相关推荐