【发布时间】:2018-05-20 09:28:36
【问题描述】:
总的来说,我对编程很陌生,但直到现在我才弄清楚这个问题。
我有一个二维 numpy 数组 mask,假设是 mask.shape is (3800,3500),其中填充了 0 和 1,代表 2D 图像的空间分辨率,其中 1 代表可见像素,0 代表背景。
我有data.shape is (909,x) 的第二个二维数组data,其中x 正是第一个数组中1 的数量。我现在想用第二个数组中长度为909 的向量替换第一个数组中的每个 1。生成shape(3800,3500,909) 的最终 3D 数组,它基本上是 2D x x y 图像,其中选定像素在 z 方向上具有 909 个值的光谱。
我试过了
mask_vector = mask.flatten
ones = np.ones((909,1))
mask_909 = mask_vector.dot(ones) #results in a 13300000 by 909 2d array
count = 0
for i in mask_vector:
if i == 1:
mask_909[i,:] = data[:,count]
count += 1
result = mask_909.reshape((3800,3500,909))
这会产生一个可行的 3D 阵列,在执行 plt.imshow(result.mean(axis=2)) 时提供 2D 图片
但是这些值仍然只有 1 和 0,而不是 z 方向上想要的光谱数据。
我也尝试使用np.where,但由于两个二维数组的形状明显不同,因此广播失败。
有人有解决办法吗?我相信一定有一个简单的方法......
【问题讨论】:
-
什么应该包含背景像素的第三维(0)?
-
附加零。基本上我不关心0像素。他们可以在第三维中获得 909 个额外的零。
标签: python numpy multidimensional-array array-broadcasting