我想把一个状态变化应用到一个大的分类矩阵(m)中,其中有k个类别,我知道k(T)中每个类别到另一个类别的转移概率
本质上,我希望能够有效地获取M中的每个元素,模拟给定T中概率的状态变化,并用计算出的变化替换元素。你知道吗
我尝试了一些解决方案:
import numpy as np
def categorical_transition(mat, t_mat, k=4):
transformed_mat = mat.copy()
cat_counts = np.bincount(mat.reshape(-1,))
for i in range(k):
rand_vec = np.random.multinomial(1, t_mat[i], cat_counts[i])
choice = np.where(rand_vec)[1]
transformed_mat[mat == i] = choice
return transformed_mat
# load data
mat = np.random.choice(4, (16000, 256))
t_mat = np.random.random((4, 4))
# normalize transition matrix
for i in range(t_mat.shape[0]):
t_mat[i] = t_mat[i] / t_mat[i].sum()
transformed_mat = categorical_transition(mat, t_mat)
这个方法是可行的,但它是缓慢的,我将感谢任何建议,更有效的方法来实现它
始终提供您迄今为止尝试的所有实现
例如,我尝试了一个简单的实现,如decribedhere.,它应该比您的解决方案快20-80倍,这取决于您有多少可用的内核。你知道吗
实施
计时
这里有一个方法,使我的例子加速了5倍
运行示例:
相关问题 更多 >
编程相关推荐