将非零索引作为数组查找

ani*_*in4 0 python numpy

我知道numpy.where给出了条件适用的数组坐标的元组.但是,如果我想要一个阵列怎么办?假设以下2d数组:

a=np.array([[1 1 1 1 0],
            [1 1 1 0 0],
            [1 0 0 0 0],
            [1 0 1 1 1],
            [1 0 0 1 0]])
Run Code Online (Sandbox Code Playgroud)

现在我想要的只是第一次出现的零,但对于每一行,即使它不存在.像indexOf()Java 一样的东西.所以输出看起来像:

array([-1,2,2,1,0])
Run Code Online (Sandbox Code Playgroud)

我需要剪切一个ndarray的片段,并且更容易减少一个维度而不是一个元组并尝试重新生成缺失的行.

PaS*_*STE 5

你在找什么?

import numpy as np

a=np.array([[1, 1, 1, 1, 0],
            [1, 1, 1, 0, 0],
            [1, 0, 0, 0, 0],
            [1, 0, 1, 1, 1],
            [1, 0, 0, 1, 0]])

np.argmax(a==0, axis=0) - ~np.any(a==0, axis=0)
Run Code Online (Sandbox Code Playgroud)

输出:

array([-1,  2,  2,  1,  0], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

这里的想法是np.argmax找到每列中第一个匹配元素的索引(axis=0对于,它看起来是你想要的输出,但如果你真的想要,请使用axis=1).因为np.argmax对于完全不匹配的列返回0,所以我从每个不包含任何0的列的结果中减去1.

  • `a.argmin(0)-a.all(0)`作为捷径. (2认同)