繁体   English   中英

根据 2D 坐标 (Python) 更改 3D 数组的值

[英]Changing values of a 3D array based on 2D coordinates (Python)

我有 2 个 arrays。 称他们为“A”和“B”。 数组'A'的形状是(10,10,3),数组'B'的形状是(10,10)。

现在,我已将数组“B”的某些元素的坐标作为元组列表获取。 我们称列表为“TupleList”。 我现在想使数组“A”中所有元素的值等于 0,但“TupleList”坐标中的那些元素除外。

想象一下 arrays 是图像 arrays。 其中作为 RGB 图像的 A 具有第三维。

我该怎么做?

由于数组“A”具有额外的第三维,我在执行此操作时遇到了麻烦。 否则,使用 np.where() 非常简单,因为我知道数组“B”可以采用的值数量有限。

这是通过将索引列表转换为第一维的索引列表和第二维的索引列表的解决方案:

import numpy as np

nrows, ncols = 5, 5

arr = np.arange(nrows * ncols * 3, dtype=float).reshape(nrows, ncols, 3)
idxs = [(0, 1), (1, 3), (3, 2), (4, 2)]

idxs_dim0, idxs_dim1 = zip(*idxs)

res = np.zeros(arr.shape)
res[idxs_dim0, idxs_dim1] = arr[idxs_dim0, idxs_dim1]

检查结果:

from itertools import product

for idx_dim0, idx_dim1 in product(range(nrows), range(ncols)):
    value = res[idx_dim0, idx_dim1]
    if (idx_dim0, idx_dim1) in idxs:
        assert np.all(value == arr[idx_dim0, idx_dim1])
    else:
        assert np.all(value == (0, 0, 0))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM