Select 从每一行随机(加权)其中一列的值

Select from each row randomly (weighted) a value from one of the columns

我有很多行和 2 列。
我想从每一行的第一列或第二列中选择一个值(加权概率)。

import numpy as np

values = np.array(
    [[0.41, 0.31],
     [0.73, 0.15],
     [0.44, 0.30],
     [0.67, 0.18],
])

我想使用 0 和 1 之间的随机选择作为这样的索引,第一列的权重为 0.6,第二列的权重为 0.4:

probs_chosen = np.random.choice([0,1], size=4, replace=True, p=[0.6, 0.4])
print(probs_chosen)
array([0, 0, 1, 0])

但是我如何使用这个索引来 select 来自第 1 行的第一个值,来自第 2 行的第一个值等
或者任何其他解决我的问题的方法也可以。一个pandas的解决方案也可以。

这种情况下的预期结果:

[0.41, 0.73, 0.30, 0.67]

你可以使用 numpy advanced indexing:

row_idx = np.arange(values.shape[0])
col_idx = np.random.choice([0,1], size=4, replace=True, p=[0.6, 0.4])
out = values[row_idx, col_idx]

输出:

array([0.41, 0.73, 0.3 , 0.67])