我知道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的片段,并且更容易减少一个维度而不是一个元组并尝试重新生成缺失的行.
是这你在找什么?
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.