【问题标题】:Replace two arrays items having some conditional statement替换具有某些条件语句的两个数组项
【发布时间】:2018-07-17 15:44:49
【问题描述】:

有两个 28*28 像素的图像数组给出这样的掩码值。 Image1 显示肺的左面罩,Image2 显示肺的右面罩。重塑这些图像后,结果就是这种类型

img1=[............,False,  True, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False,  True,  True,..................]
img2=[.........................,True,  True,  True, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False,  True,  True,  True,  True,  True, False, False,
   False, False, False, False,............................]

基本上,我想合并这两个掩码以制作 1 个掩码,该掩码将是一个 new_image 并显示左右掩码的组合结果。我的想法是替换 img2 的索引值,它在 Img1 中显示为 True。这是我的代码

import numpy as np
from PIL import Image
img1=Image.open(path)
img2=Image.open(path)
img1_array=np.asarray(img1)
img2_array=np.asarray(img2)
img1_array_reshape=img1_array.reshape(784)
img2_array_reshape=img2_array.reshape(784)
print(len(img1_array_reshape))
print(len(img2_array_reshape))

indices=[i for i,val in enumerate(img2_array_reshape) if val==True]
print(indices)
for index in indices:
    print(index)
    img1_array_reshape[indices[index]] = img2_array_reshape[index]

但我无法运行最后一行,有没有直接的方法可以做到这一点?

【问题讨论】:

  • 您在寻找类似img1 | img2 的东西吗?你能发布一个小样本输出吗?

标签: arrays python-3.x list numpy


【解决方案1】:

如果您尝试将这两个数组与True 组合,那么您可以使用zip

a = [True,False,False]
b = [True,True,True]

combined = [i[0] or i[1] for i in zip(a,b)]

print(combined) //[True, True, True]

【讨论】:

  • 我建议不要这样做,因为数组已经以np.ndarray 而不是lists 给出。因此,布尔掩码是更简洁、更快速且更具 Python 风格的方法。
【解决方案2】:

我建议使用布尔掩码来索引img2_array 中的单元格,这些单元格是img1_array 中的True

img1 = Image.open(path)
img2 = Image.open(path)
img1_array = np.asarray(img1)
img2_array = np.asarray(img2)
img2_array[img1_array] = True

由于img1_array 似乎已经是dtype=bool 的数组,所以可以直接将其用作索引数组。
这避免了缓慢而复杂的循环以及通过重塑和列表理解创建复杂的indices。 如果你无论如何都想重塑你的图像,你仍然可以做img1_array_reshape = img1_array.reshape(-1)。这在应用布尔掩码操作之前和之后都有效。

【讨论】:

  • 抱歉,img1 和 img2 不是 bool 类型,而是图像类型 @Scotty1-
  • 您应该在您的问题中通过发布正确输入的最低工作示例来澄清这一点。否则无法解决您的问题。
  • 为什么投反对票?对于提供的信息,我的回答是正确的。如果提供的信息不正确,我无法做一些魔法并猜测正确的答案。也不推荐Leogoesger的答案。我把上面的理由说了。如果您有更多和/或更大的图像,If 将不会提供有效的代码。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 2019-01-27
相关资源
最近更新 更多