我有一个2d numpy数组,矩阵,形状(m,n)。我的实际用例有m~1e5和n~100,但是为了有一个简单的最小例子:
matrix = np.arange(5*3).reshape((5, 3))
我有一个整数的索引数组,idx,形状(m,),每个条目都在[0,n)之间。此数组指定应从矩阵的每一行中选择哪一列。
idx = np.array([2, 0, 2, 1, 1])
所以,我试图从第0行选择第2列,第1行第0列,第2行第2列,第1行第1列,第4行第1列。因此最终答案应该是:
correct_result = np.array((2, 3, 8, 10, 13))
我尝试了以下内容,这是直观的,但不正确:
incorrect_result = matrix[:, idx]
上面的语法是将idx作为一个花哨的索引数组逐行应用,导致另一个形状矩阵(m,n),这不是我想要的。
这种类型的花式索引的正确语法是什么?
答案 0 :(得分:4)
/* Navigation */
.owl-prev, .owl-next {
position:absolute;
top:50%;
padding:5px;
margin:0;
z-index:100;
font-size:3rem;
cursor:pointer;
color:#000000;
}
.owl-prev {
left:-10px;
opacity: 0 !important;
}
.owl-next {
right:-10px;
opacity: 0 !important;
}
.owl-theme .owl-controls .owl-buttons div{
color: #555;
display: inline-block;
zoom: 1;
*display: inline;/*IE7 life-saver */
font-size: 3rem;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
background: transparent;
filter: Alpha(Opacity=100);/*IE7 fix*/
opacity: 1;
margin-top:-32px;
}
.owl-theme .owl-controls .owl-buttons div:hover {
color:#000000;
opacity: 1 !important;
}
高级索引表达式correct_result = matrix[np.arange(m), idx]
提供的输出为matrix[I, J]
。
如果我们需要output[n] == matrix[I[n], J[n]]
,那么我们需要output[n] == matrix[n, idx[n]]
和I[n] == n
,因此我们需要J[n] == idx[n]
为I
和np.arange(m)
J
。