【发布时间】:2016-04-11 10:27:18
【问题描述】:
我对我的脚本有疑问,希望得到您的帮助或任何想法来解决我的问题。
我有一个包含数据的二维数组,我想将它除以另一个二维数组。到目前为止,这不是问题。 但我提出了一个条件:这两个数组都必须考虑二进制掩码并且只取像素 = 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 条件处理我的数组时,我的二维数组变成了一维数组,我无法进行操作。
您对我如何处理有任何想法吗? 也许不是很清楚,我很抱歉我的英语很差。
谢谢!
编辑:
变量 grid.T 是一个二进制数组(0 或 1),它指示我的像素中是否有星星(值 1)或什么都没有(值 0)。
变量convolution_mask_local 表示前一个grid.T 由一个高斯卷积。也是一个二维数组
OliverW 的解决方案。 :
当我用 OliverW. 提供的解决方案更新我的脚本时,我得到了这个:
fig10, (ax1, ax2, ax3) = plt.subplots(1,3)
fig = plt.gcf()
fig.set_size_inches(16, 9)
mask = binary_mask == 0
A = np.ma.masked_array(convolution_locale, mask = mask)
B = np.ma.masked_array(convolution_mask_locale, mask = mask)
C = np.ma.masked_array(convolution_grande, mask = mask)
D = np.ma.masked_array(convolution_mask_grande, mask =mask)
step1 = A/B
step2 = C/D
fig_step1 = ax1.imshow(step1, interpolation='nearest')
fig10.colorbar(fig_step1,ax=ax1)
ax1.set_xlabel("X (arcmin)")
ax1.set_ylabel("Y (arcmin)")
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是什么?convolution_mask_locale是什么?请把你的例子变成minimal, complete and verifiable example。 -
@OliverW。好的,抱歉 OliverW,我编辑了我的问题,以便尽可能清晰。由于我有很多细节,我可能忘记了一些东西;)
标签: python arrays numpy matplotlib