如何使用指定数量的随机定位1来制作0/1矩阵

时间:2018-04-17 17:27:44

标签: r matrix

我想制作一个数字10x10矩阵(大小不太重要),填充0并且有1,但我希望只有5个,我希望它们随机分配这样每次我运行它们的位置都会改变。

这可能吗?谢谢!

4 个答案:

答案 0 :(得分:1)

一种选择是生成随机5索引,并用1替换矩阵中的索引。

m[sample(1:100,5,replace = FALSE)] <- 1
m
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]    0    1    0    0    0    1    0    0    0     0
# [2,]    0    0    0    0    0    0    0    0    0     0
# [3,]    0    1    0    0    0    0    0    0    0     0
# [4,]    0    0    0    0    0    0    0    0    0     0
# [5,]    1    0    0    0    0    0    0    0    0     0
# [6,]    0    0    0    0    0    0    0    0    0     0
# [7,]    0    0    0    0    0    0    0    0    0     0
# [8,]    0    0    0    0    0    0    0    0    0     0
# [9,]    0    0    0    0    0    0    0    0    1     0
# [10,]    0    0    0    0    0    0    0    0    0     0

数据

m <- matrix(rep(0,100),10)

答案 1 :(得分:1)

尝试

n <- 10
m <- matrix(0, nrow = n, ncol = n)
ind <- sample(n^2, 5)
m[ind] <- 1

答案 2 :(得分:1)

zero.one <- rep(0, 100)
zero.one[sample(100, 5)] <- 1  # randomly assigning just 5 1's
matrix(zero.one, ncol=10) # creating a 10x10 matrix

答案 3 :(得分:0)

这是一个单行解决方案:

tracks = importTrackMateTracks('8Tracks.xml', clipZ, scaleT);

x_displacements = zeros(length(tracks), 1);
for i = 1:length(tracks)
    current_track = tracks{i};
    first_x = current_track(1, 2);
    last_x = current_track(end, 2);
    x_displacements(i) = last_x - first_x;
end

随机抽取5 1s和95 0s的向量,然后将其转换为矩阵。