【问题标题】:Place a vector randomly inside a matrix in R在R中的矩阵内随机放置一个向量
【发布时间】:2017-10-21 17:42:00
【问题描述】:

如何将向量a<-c(1,2,3,4,5,6) 放置在矩阵m<-matrix(0, nrow = 10, ncol = 10) 中的随机位置?

向量必须在一起:

       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    0    0    0    0    0    0    0    0     0
 [2,]    1    0    0    0    0    0    0    0    0     0
 [3,]    2    0    0    0    0    0    0    0    0     0
 [4,]    3    0    0    0    0    0    0    0    0     0
 [5,]    4    0    0    0    0    0    0    0    0     0
 [6,]    5    0    0    0    0    0    0    0    0     0
 [7,]    6    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    0     0
[10,]    0    0    0    0    0    0    0    0    0     0

而且它必须是水平的、垂直的或对角的 我试过了:

start = sample.int(length(m), 1)
m[start:(start+length(a)-1)] = a

但它不能发生以下情况:

       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    0    0    0    0    0    5    0    0     0
 [2,]    0    0    0    0    0    0    6    0    0     0
 [3,]    0    0    0    0    0    0    0    0    0     0
 [4,]    0    0    0    0    0    0    0    0    0     0
 [5,]    0    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    1    0    0    0     0
 [8,]    0    0    0    0    0    2    0    0    0     0
 [9,]    0    0    0    0    0    3    0    0    0     0
[10,]    0    0    0    0    0    4    0    0    0     0

谢谢

【问题讨论】:

    标签: r matrix vector random


    【解决方案1】:

    对与a 大小相同的一维索引进行采样,然后在这些索引处将向量分配给m

    m[sample.int(length(m), length(a))] <- a
    m
    #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    # [1,]    0    6    0    0    0    0    0    0    0     0
    # [2,]    0    0    0    0    0    4    0    0    0     0
    # [3,]    0    3    0    1    0    0    0    0    5     0
    # [4,]    0    0    0    0    0    0    0    0    0     0
    # [5,]    0    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    2     0
    # [9,]    0    0    0    0    0    0    0    0    0     0
    #[10,]    0    0    0    0    0    0    0    0    0     0
    

    如果向量需要连续,可以采样起始索引,然后用范围索引赋值:

    start = sample.int(length(m), 1)
    m[start:(start+length(a)-1)] = a
    
    m
    #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    # [1,]    0    0    0    0    0    0    0    0    0     0
    # [2,]    0    0    0    0    0    0    0    0    0     0
    # [3,]    0    0    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,]    2    0    0    0    0    0    0    0    0     0
    # [7,]    3    0    0    0    0    0    0    0    0     0
    # [8,]    4    0    0    0    0    0    0    0    0     0
    # [9,]    5    0    0    0    0    0    0    0    0     0
    #[10,]    6    0    0    0    0    0    0    0    0     0
    

    【讨论】:

    • Thaks,但我的意思是在我添加的编辑中将矢量放在一起
    • 再次感谢,但使用该代码,我只能水平获取矢量,除了它发生以下情况:
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多