python - 替换通过索引数组访问的 numpy ndarray 中的元素

标签 python numpy multidimensional-array

我想用我拥有的值替换多维数组中的某些列。我尝试了以下方法。

cols_to_replace = np.array([1, 2, 2, 2])

original_array = np.array([[[255, 101,  51],
    [255, 101, 153],
    [255, 101, 255]],

   [[255, 153,  51],
    [255, 153, 153],
    [255, 153, 255]],

   [[255, 203,  51],
    [255, 204, 153],
    [255, 205, 255]],

   [[255, 255,  51],
    [255, 255, 153],
    [255, 255, 255]]], dtype=int)

仅将列替换为 (0, 0, 255)

我希望可以使用数组 cols_to_replace 索引所有列

 original_array[:, cols_to_replace] = (0, 0, 255)

这给出了错误的答案!

意外的输出。

array([[[255, 101,  51],
    [  0,   0, 255],
    [  0,   0, 255]],

   [[255, 153,  51],
    [  0,   0, 255],
    [  0,   0, 255]],

   [[255, 203,  51],
    [  0,   0, 255],
    [  0,   0, 255]],

   [[255, 255,  51],
    [  0,   0, 255],
    [  0,   0, 255]]])

我的预期输出是

array([[[255, 101,  51],
    [  0,   0, 255],
    [255, 101, 255]],

   [[255, 153,  51],
    [255, 153, 153],
    [  0,   0, 255]],

   [[255, 203,  51],
    [255, 204, 153],
    [  0,   0, 255]],

   [[255, 255,  51],
    [255, 255, 153],
    [  0,   0, 255]]])
  • 到底发生了什么?

  • 如何完成我想要做的事情(即在每一行中访问、col 1、col 2、col 2、col 2 并替换值。

  • 如果我想删除这些列,有没有 numpy 方法可以做到这一点?

最佳答案

您的预期输出是由以下内容产生的:

>>> original_array[np.arange(cols_to_replace.size), cols_to_replace] = 0, 0, 255

这与您原来的方法不同,因为高级索引和切片索引是“单独”评估的。通过将 : 更改为 arange,我们将第零维度切换为高级索引,以便 cols_to_replace 逐个元素配对0, 1, 2, ... 第零个坐标。

您可以使用 mask 删除您的选择,如下所示:

>>> mask = np.ones(original_array.shape[:2], bool)
>>> mask[np.arange(cols_to_replace.size), cols_to_replace] = False
>>> original_array[mask].reshape(original_array.shape[0], -1, original_array.shape[2])
array([[[255, 101,  51],
        [255, 101, 255]],

       [[255, 153,  51],
        [255, 153, 153]],

       [[255, 203,  51],
        [255, 204, 153]],

       [[255, 255,  51],
        [255, 255, 153]]])

关于python - 替换通过索引数组访问的 numpy ndarray 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977332/

相关文章:

python - 为什么\g<0> 在 re.sub 中的行为与\0 不同?

python - 图例中的额外标记

用于检索假负值的 Python 编程

python - 将元素插入 numpy 数组

arrays - 如何在 Perl 中将数组引用添加到现有数组的中间?

python - 此问题的智能语法

python - 在python多处理中查找异常

python - 无法在 PyCharm 上导入 cv2

c# - 将一维编码的二维数组划分为多个扇区

javascript - 使用 javascript 将多个用户表单输入存储在关联数组中