<p>带有单个参数的<strong><a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow noreferrer">^{<cd1>}</a></strong>等价于<strong><a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.nonzero.html" rel="nofollow noreferrer">^{<cd2>}</a></strong>。它提供了条件input数组是<code>True</code>的索引。</p>
<p>在您的示例中,您正在检查<code>a[:,1]</code>和<code>values</code>之间的元素相等性</p>
<pre><code>a[:, 1] == values
False
</code></pre>
<p>所以它给出了正确的结果:输入中没有索引是<code>True</code>。</p>
<p>您应该改用<strong><a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.isin.html" rel="nofollow noreferrer">^{<cd7>}</a></strong></p>
<pre><code>np.isin(a[:,1], values)
array([False, False, True, True, False, False, False, False, True, False], dtype=bool)
</code></pre>
<p>现在可以使用<strong><a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow noreferrer">^{<cd1>}</a></strong>获取索引</p>
<pre><code>np.where(np.isin(a[:,1], values))
(array([2, 3, 8]),)
</code></pre>
<p>并使用这些来处理原始数组</p>
<pre><code>a[np.where(np.isin(a[:,1], values))]
array([[ 1, 97612, 1],
[ 1, 97697, 1],
[ 1, 97944, 1]])
</code></pre>
<p>通过简单的等式检查,您的初始解决方案确实可以使用正确的<a href="https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html" rel="nofollow noreferrer">^{<cd9>}</a>:</p>
<pre><code>np.where(a[:,1] == values[..., np.newaxis])[1]
array([2, 3, 8])
</code></pre>
<hr/>
<p><strong>编辑</strong>:<em>如果您在使用上述结果索引和操作数组时遇到问题,这里有几个简单的示例</em></p>
<p>现在您应该有两种方法来访问原始数组中的匹配元素,二进制掩码或<code>np.where</code>中的索引。</p>
<pre><code>mask = np.isin(a[:,1], values) # np.in1d if np.isin is not available
idx = np.where(mask)
</code></pre>
<p>假设要将所有匹配行设置为零</p>
<pre><code>a[mask] = 0 # or a[idx] = 0
array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 0, 0, 0],
[ 0, 0, 0],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 0, 0, 0],
[ 1, 97955, 2]])
</code></pre>
<p>或者将匹配行的第三列乘以<code>100</code></p>
<pre><code>a[mask, 2] *= 100
array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 1, 97612, 100],
[ 1, 97697, 100],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 1, 97944, 100],
[ 1, 97955, 2]])
</code></pre>
<p>或者您想删除匹配的行(这里使用索引比掩码更方便)</p>
<pre><code>np.delete(a, idx, axis=0)
array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 1, 97955, 2]])
</code></pre>