使用矢量值将新行添加到R中的矩阵子对角线

时间:2016-08-09 00:57:51

标签: r matrix vector

我正在编写一个函数来创建一个具有以下结构的矩阵。最重要的是要注意,第2 - 7行包含一个值为subdiagonal,而0包含在所有其他列中:

Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    sw.Start()

    Dim tasks As List(Of Task(Of String)) = New List(Of Task(Of String))

    For i = 1 To iterations
        Dim req As HttpWebRequest = HttpWebRequest.Create("http://example.com/")

        tasks.Add(ReadResponse(req))
    Next

    Await Task.WhenAll(tasks)

    sw.Stop()
    Debug.WriteLine(sw.ElapsedMilliseconds)
    sw.Reset()
    MsgBox("Execution!")
End Sub

Private Async Function ReadResponse(req As HttpWebRequest) As Task(Of String)
    Using resp As WebResponse = Await req.GetResponseAsync
        Using sr As New IO.StreamReader(resp.GetResponseStream)
            Dim respBody As String = Await sr.ReadToEndAsync

            Return respBody
        End Using
    End Using
End Function

我的功能有两个输入,0.00 0.00 0.00 0.00 0.00 0.50 0.50 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.90 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.60 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.80 0.00 x。第一行由y向量定义,以便:

x

我想使用第二个向量x <- c(0.00, 0.00, 0.00, 0.00, 0.00, 0.50, 0.50) 来完成矩阵的其余部分。通过使用R2 C1中的第一个值,R3 C2中的第二个值,R4 C3中的第三个值,依此类推,直到矩阵完成,然后用0填充其他所有值。

y

我确信这可以在R中解决,也许已经有一个矩阵函数来定义这个结构或者可以使用for循环。

我可以编写函数,创建矩阵并添加第一行(见下文),但下一位稍微超出我当前的技能组合 - 函数需要是动态的 - 即。 x,y和长度的值可能会改变。

任何人的任何帮助或指示都将受到赞赏..

(这就是我到目前为止......我知道这有点可怜)

y <- c(0.75, 0.80, 0.80, 0.90, 0.60, 0.80, 0.00)

1 个答案:

答案 0 :(得分:3)

这是一次尝试:

head(rbind(x, diag(y)),-1)

这基本上会创建一个y的方阵,其中diag onal上的值会按rbind - x向下推一行,然后删除新创建的矩阵底部的额外行。

或者使用rowcol进行一些创意索引也可以做到:

m <- matrix(0,nrow=7,ncol=7)
m[row(m)-col(m)==1] <- head(y,-1)
m[1,] <- x

两人都回归:

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] 0.00  0.0  0.0  0.0  0.0  0.5  0.5
#[2,] 0.75  0.0  0.0  0.0  0.0  0.0  0.0
#[3,] 0.00  0.8  0.0  0.0  0.0  0.0  0.0
#[4,] 0.00  0.0  0.8  0.0  0.0  0.0  0.0
#[5,] 0.00  0.0  0.0  0.9  0.0  0.0  0.0
#[6,] 0.00  0.0  0.0  0.0  0.6  0.0  0.0
#[7,] 0.00  0.0  0.0  0.0  0.0  0.8  0.0