用R画一个Hankel矩阵
我想用R绘制一个Hankel矩阵,只使用R的用R画一个Hankel矩阵,r,matrix,R,Matrix,我想用R绘制一个Hankel矩阵,只使用R的matrix(),seq()和rep()函数。到目前为止,我以某种方式绘制这个矩阵: #Do this exercise with other packages, need to rework install.packages("matrixcalc") library(matrixcalc) E1 <- hankel.matrix( 5, seq( 1, 9 ) ) print(E1) #Use matrix() only, not effic
matrix()
,seq()
和rep()
函数。到目前为止,我以某种方式绘制这个矩阵:
#Do this exercise with other packages, need to rework
install.packages("matrixcalc")
library(matrixcalc)
E1 <- hankel.matrix( 5, seq( 1, 9 ) )
print(E1)
#Use matrix() only, not efficient
E2 <- matrix(c(1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9), ncol=5)
print(E2)
#Use seq() but not worked
E3 <- matrix(c(seq(1:5),seq(2:6),seq(3:7),seq(4:8),seq(5:9)), ncol=5)
print(E3)
我对R还是一个新手,所以每个想法都是受欢迎的。你可以这样做:
matrix(rep(1:5,5)+rep(0:4,each=5),ncol=5)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 2 3 4 5
# [2,] 2 3 4 5 6
# [3,] 3 4 5 6 7
# [4,] 4 5 6 7 8
# [5,] 5 6 7 8 9
或更优雅,但使用外部
:
outer(0:4,1:5,'+')
编辑:
rep
解决方案的工作原理如下:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
12345 12345 12345 ... (rep times, repeat the vector n times
+ 00000 11111 22222 ... (rep with each , repeat each element n times
= 12345 23456 34567 .....
外部
一开始可能很棘手,可能会帮助您理解它并进行常规调试。您可以这样做:
matrix(rep(1:5,5)+rep(0:4,each=5),ncol=5)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 2 3 4 5
# [2,] 2 3 4 5 6
# [3,] 3 4 5 6 7
# [4,] 4 5 6 7 8
# [5,] 5 6 7 8 9
或更优雅,但使用外部
:
outer(0:4,1:5,'+')
编辑:
rep
解决方案的工作原理如下:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
12345 12345 12345 ... (rep times, repeat the vector n times
+ 00000 11111 22222 ... (rep with each , repeat each element n times
= 12345 23456 34567 .....
outer
一开始可能很棘手,也许可以帮助您理解它并进行常规调试。我正在颠倒两种不同解决方案的顺序,以便使符合条件的解决方案位于顶部:
一个通用函数(即不依赖于连续值的函数),它只使用两个额外函数(如c()
和“[”)来完成工作:
N <- c(9L, 7L, 3L, 2L, 1L, 8L, 4L, 5L, 6L, 10L)
hankel2 <- function(N, n){stopifnot(length(N)==2*n);
matrix( rep(N,n)[c(rep(TRUE,n),rep(FALSE,n+1))], n) }
hankel2(N,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 9 7 3 2 1
[2,] 7 3 2 1 8
[3,] 3 2 1 8 4
[4,] 2 1 8 4 5
[5,] 1 8 4 5 6
汉克尔·汉克尔(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 4 5 6 7 8
[5,] 5 6 7 8 9
(无可否认,我没有按照规范行事,尽管我想知道到目前为止,是否有任何解决方案能够经受住一个不连续的向量。这一个是:)
>hankel5 hankel5(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 3 5 7 9 4
[2,] 5 7 9 4 10
[3,] 7 9 4 10 1
[4,] 9 4 10 1 8
[5,] 4 10 1 8 2
这是另一个通用函数:
> hankel <- function( n ) embed(1:(2*n),5)[1:n, n:1]
> hankel(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 4 5 6 7 8
[5,] 5 6 7 8 9
hankel <- function( N, n ) {stopifnot(length(N) == 2*n); embed(N,n)[1:n, n:1]
hankel我正在颠倒两种不同解决方案的顺序,以使符合条件的解决方案位于顶部:
一个通用函数(即不依赖于连续值的函数),它只使用两个额外函数(如c()
和“[”)来完成工作:
N <- c(9L, 7L, 3L, 2L, 1L, 8L, 4L, 5L, 6L, 10L)
hankel2 <- function(N, n){stopifnot(length(N)==2*n);
matrix( rep(N,n)[c(rep(TRUE,n),rep(FALSE,n+1))], n) }
hankel2(N,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 9 7 3 2 1
[2,] 7 3 2 1 8
[3,] 3 2 1 8 4
[4,] 2 1 8 4 5
[5,] 1 8 4 5 6
汉克尔·汉克尔(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 4 5 6 7 8
[5,] 5 6 7 8 9
(无可否认,我没有按照规范行事,尽管我想知道到目前为止,是否有任何解决方案能够经受住一个不连续的向量。这一个是:)
>hankel5 hankel5(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 3 5 7 9 4
[2,] 5 7 9 4 10
[3,] 7 9 4 10 1
[4,] 9 4 10 1 8
[5,] 4 10 1 8 2
这是另一个通用函数:
> hankel <- function( n ) embed(1:(2*n),5)[1:n, n:1]
> hankel(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 4 5 6 7 8
[5,] 5 6 7 8 9
hankel <- function( N, n ) {stopifnot(length(N) == 2*n); embed(N,n)[1:n, n:1]
hankel如果您能解释代码中的参数以及关于rep()
,我将不胜感激。我阅读了它的定义,但实际上我不理解它。我对R还是非常陌生:(与outer()相同的问题)
,我不明白它是如何工作的。我问教授如何在R中调试,但他只是指导我使用Ctrl+Enter
检查每一步,是否有任何解决方案可以在R中调试Studio@Tuong-在RStudioDebug
下拉菜单中,查看On Error
@Tuong的不同选项,我添加了一些解释关于解决方案的定义,以及如何调试外部系统。@agstudy我想我了解了如何使用tworep()<代码> >但是对于<代码> 1:n>代码>这一方法是否仍然适用?我稍后会阅读<代码>外部<代码>。@ ReHdScript我只想进入一个循环,或者一些原生函数来读取每个步骤之后变量如何变化,就像C或C++一样,我们能在R中做吗?如果你能解释代码中的参数,我将非常感激。关于rep()
,我不明白它是如何工作的。我问教授如何在R中调试,但他只是指导我使用Ctrl+Enter
检查每一步,是否有任何解决方案可以在R中调试Studio@Tuong-在RStudioDebug
下拉菜单中,查看On Error
@Tuong的不同选项,我添加了一些解释关于解决方案的定义,以及如何调试外部系统。@agstudy我想我了解了如何使用tworep()一起,但是对于<代码> 1:N< /代码>这方法仍然适用吗?稍后我将阅读<代码>外部< /代码>。@ ReHdScript我只想进入一个循环,或者一些原生函数来读取每个步骤之后的变量如何变化,就像C或C++一样,我们能在R中做吗?我尝试只使用一些基本函数,如<代码>矩阵()。
、seq()
和rep()
仅限于+1供您帮助,我想这两个函数都可以通过将“n”计算为length(n)/2来简化。我尝试只使用一些基本函数,如matrix()
、seq()
和rep()
仅限于+1供您帮助我想这两个函数都可以通过将“n”计算为length(n)/2来简化。顺便说一句:seq调用不正确,不应该使用“:”inside seq.或只是使用“:…E3您能解释为什么不应该使用:
insideseq()
”因为参数的位置匹配吗(参数没有名称)将为第一个参数提供多元素向量,而为第二个参数提供值。函数“:”-实际上是seq
functionBTW的中缀版本:seq调用不正确,不应使用“:“inside seq.Or just use”:…E3您能解释一下为什么不应该在seq()
中使用:
?因为参数的位置匹配(参数没有名称)会给第一个参数提供一个多元素向量,而给第二个参数没有值。:“-函数实际上是seq
函数的中缀版本