采样二维矩阵,同时保持原始矩阵的大小

2024-03-29 02:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究概率矩阵分解。我想将评分矩阵分为训练和验证。我看到的代码不是随机样本

我一直在想怎么做

为了一个简单的例子,原始矩阵R是(10,10)。我在寻找一个列矩阵,它是a(10,10),但只有,比方说,70%的随机抽样矩阵R的值,其他的都是0。验证矩阵也为(10,10),但剩余30%的值为0

这里的关键是保持矩阵的大小相同

有人知道怎么做吗

编辑: 仔细想想:如果你做元素加法,TrainingMatrix+ValidationMatrix=Matrix R


1条回答
网友
1楼 · 发布于 2024-03-29 02:08:44

我的解决方案。如果有更简单/更快的方法,请告诉我

import copy

#Figuring out Matrix Sampling
np.random.seed(3)
training_percent = .7

R = np.arange(100).reshape(10,10)
print("R:")
print(R)


#Get the indexes of the non-zero elements
non_zero_is,non_zero_js = np.nonzero(R)

#Randomly sample the indexes
sampled_indexes_of_non_zeros = np.random.choice(len(i), 
    int(np.floor(training_percent * len(i))), replace=False)

#Training Mask
training_mask = np.zeros(R.shape,dtype=bool)
for position in sampled_indexes_of_non_zeros:
    training_mask[non_zero_is[position],non_zero_js[position]] = True

#Training Matrix
training_matrix = R.copy()
training_matrix[~training_mask] = 0
print("\ntraining_martix:")
print(training_matrix)

#Validation Matrix
validation_matrix = R.copy()
validation_matrix[training_mask] = 0
print("\nvalidation_martix:")
print(validation_matrix)

相关问题 更多 >