回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数组和一个布尔数组(作为一个热编码)</p>
<pre class="lang-py prettyprint-override"><code>a = np.arange(12).reshape(4,3)
b = np.array([
[1,0,0],
[0,1,0],
[0,0,1],
[0,0,1],
], dtype=bool)
print(a)
print(b)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
# [[ True False False]
# [False True False]
# [False False True]
# [False False True]]
</code></pre>
<p>我想用一个布尔数组来选择元素</p>
<pre class="lang-py prettyprint-override"><code>print(a[:, [True, False, False]])
# array([[0],
# [3],
# [6],
# [9]])
print(a[:, [False, True, False]])
# array([[ 1],
# [ 4],
# [ 7],
# [10]])
</code></pre>
<p>但这是基于所有行的相同模板布尔值进行选择的。我想在每行的基础上执行此操作:</p>
<pre class="lang-py prettyprint-override"><code>print(a[:, b])
# IndexError: too many indices for array
</code></pre>
<p>我应该在<code>...</code>中输入什么,这样我就得到:</p>
<pre class="lang-py prettyprint-override"><code>print(a[:, ...])
# array([[0],
# [4],
# [8],
# [11]])
</code></pre>
<p>编辑:这类似于臭名昭著的<a href="http://cs231n.github.io/neural-networks-case-study/#grad" rel="nofollow noreferrer">CS231</a>课程中使用的内容:</p>
<pre class="lang-py prettyprint-override"><code>dscores = a
num_examples = 4
# They had 300
y = b
dscores[range(num_examples),y]
# equivalent to
# a{:,b]
</code></pre>
<p>编辑2:在<a href="http://cs231n.github.io/neural-networks-case-study/#grad" rel="nofollow noreferrer">CS231</a>示例中,<code>y</code>是一维的,不是热编码的!你知道吗</p>
<p>他们在做<code>dscores[[rowIdx],[columnIdx]]</code></p>