我有一个要在其上使用布尔索引的数组,其中包含多个索引数组,每个数组产生一个不同的数组。示例:
w = np.array([1,2,3])
b = np.array([[False, True, True], [True, False, False]])
应按照以下方式返回内容:
[[2,3], [1]]
我假设由于包含True
的单元格的数量在蒙版之间可以变化,所以我不能期望结果驻留在2d numpy数组中,但是我仍然希望有比迭代蒙版更优雅的东西将索引w
的结果附加到第i个b
掩码的位置。
我错过更好的选择了吗?
编辑:我接下来要做的下一步是对w[b]
返回的每个数组求和,返回一个标量列表。如果这样可以使问题更容易解决,我也想知道。
答案 0 :(得分:1)
假设您想要一个numpy数组列表,则可以简单地使用一个理解:
public function Products(){
return $this
->hasMany(ProductCatRel::class, 'category')
->with(['Product' => function ($q) {
$q->where('status', 1)->orderBy('position');
}])
->whereHas('Product', function($q) {
$q->where('status', 1);
});
}
如果您的目标只是所使用的掩盖值的总和:
w = np.array([1,2,3])
b = np.array([[False, True, True], [True, False, False]])
[w[bool] for bool in b]
# [array([2, 3]), array([1])]
或
np.sum(w*b) # 6
…由于np.sum(w*b, axis=1) # array([5, 1])
# or b @ w
次,您的数字将为0,因此不会影响总和。
答案 1 :(得分:0)
尝试一下:
[w[x] for x in b]
希望这会有所帮助。