【问题标题】:np.where on 2D array without masked array or any second argumentnp.where 在没有掩码数组或任何第二个参数的二维数组上
【发布时间】:2021-09-11 17:49:14
【问题描述】:

我正在检查一个代码 sn-ps,有一个类似下面的代码

z = [[True, False, True],[True, True, True],[False, False, False]]
xz, yz = np.where(z)
print(xz)
print(yz)

返回

[0 0 1 1 1]
[0 2 0 1 2]

如果我做

z = [[True, False, True],[True, True, True]]

我会得到相同的结果

[0 0 1 1 1]
[0 2 0 1 2]

当我制作时

z = [[True, False],[True, True]]

结果是

[0 1 1]
[0 0 1]

我无法找出它在做什么,这是在 github 上的 SynthText repo 中提出的。 如果有人能帮助理解它的作用,我将不胜感激?它的用途是什么?

【问题讨论】:

    标签: python arrays numpy numpy-ndarray image-masking


    【解决方案1】:

    如果我们考虑二维数组,例如矩阵,np.where(z) 有助于获取元素的索引为真或非零。二维数组索引有两个分量,对应于数组的每个元素[rows' number, columns' number]。 第一个变量,即您的示例中的 xz,显示 True 或非零元素的行数,yz 显示相应的列数。以下代码可能有助于理解:

    xz = [1th-x, 2nd-x, 3rd-x]
    yz = [1th-y, 2nd-y, 3rd-y]
    nonzero_indices = [[1th-x, 1th-y], [2nd-x, 2nd-y], [3rd-x, 3rd-y]]
    

    使用以下代码将获取每个 True 或非零元素的索引,因为它在上面的代码中显示为 nonzero_indices

    print(np.transpose(np.where(z)))
    

    这会给[[0 0] [1 0] [1 1]]
    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      如果你仔细阅读np.where 上的文档,你会发现如果你只提供条件参数,它就等同于np.asarray(condition).nonzero(),所以行为归结为np.nonzero

      >>> z = np.array([[True, False], [True, True]])
      

      此数组中有三个非零元素,索引为:[0, 0][1, 0][1, 1]

      >>> np.nonzero(z)
      (array([0, 1, 1], dtype=int64), array([0, 0, 1], dtype=int64))
      

      元组的第一个元素是每个非零元素的第一个索引 ([0, 1, 1]),元组的第二个元素是每个非零元素的第二个索引 ([0, 0, 1])。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多