【发布时间】:2014-10-25 03:35:24
【问题描述】:
我有一个 7x7 矩阵:
Mat<-matrix(nrow=7,ncol=7)
带有某些元素:
Mat[2,2]<-37
Mat[2,4]<-39
Mat[2,6]<-24
Mat[4,2]<-35
Mat[4,4]<-36
Mat[4,6]<-26
Mat[6,2]<-26
Mat[6,4]<-31
Mat[6,6]<-39
我正在生成随机元素,并想测试它们加起来是否达到指定值
我写了以下代码:
TF<-c()
TF[1]<-isTRUE(Mat[2,2]==sum(Mat[1,1],Mat[1,2],Mat[1,3],Mat[2,1],Mat[2,3],Mat[3,1],Mat[3,2],Mat[3,3]))
TF[2]<-isTRUE(Mat[2,4]==sum(Mat[1,3],Mat[1,4],Mat[1,5],Mat[2,3],Mat[2,5],Mat[3,3],Mat[3,4],Mat[3,5]))
TF[3]<-isTRUE(Mat[2,6]==sum(Mat[1,5],Mat[1,6],Mat[1,7],Mat[2,5],Mat[2,7],Mat[3,5],Mat[3,6],Mat[3,7]))
TF[4]<-isTRUE(Mat[4,2]==sum(Mat[3,1],Mat[3,2],Mat[3,3],Mat[4,3],Mat[4,5],Mat[5,1],Mat[5,2],Mat[5,3]))
TF[5]<-isTRUE(Mat[4,4]==sum(Mat[3,3],Mat[3,4],Mat[3,5],Mat[4,3],Mat[4,5],Mat[5,3],Mat[5,4],Mat[5,5]))
TF[6]<-isTRUE(Mat[4,6]==sum(Mat[3,5],Mat[3,6],Mat[3,7],Mat[4,5],Mat[4,7],Mat[5,5],Mat[5,6],Mat[5,7]))
TF[7]<-isTRUE(Mat[6,2]==sum(Mat[5,1],Mat[5,2],Mat[5,3],Mat[6,1],Mat[6,3],Mat[7,1],Mat[7,2],Mat[7,3]))
TF[8]<-isTRUE(Mat[6,4]==sum(Mat[5,3],Mat[5,4],Mat[5,5],Mat[6,3],Mat[6,5],Mat[7,3],Mat[7,4],Mat[7,5]))
TF[9]<-isTRUE(Mat[6,6]==sum(Mat[5,5],Mat[5,6],Mat[5,7],Mat[6,5],Mat[6,7],Mat[7,5],Mat[7,6],Mat[7,7]))
现在我正在尝试使用嵌套的 for 循环使其更高效:
O<-c(2,4,6)
for (G in O)
{
for (H in O)
{
TF[]<-isTRUE(Mat[G,H]==sum(Mat[G-1,H-1],Mat[G-1,H],Mat[G-1,H+1],Mat[G,H-1],Mat[G,H+1],Mat[G+1,H-1],Mat[G+1,H],Mat[G+1,H+1]))
}
}
问题是向量元素将被覆盖,添加另一个for循环没有任何意义。 如果发现一个错误,我也很难找到重新运行模拟的方法。
【问题讨论】:
-
如果您分配一个新对象并用新值填充它,它不会被覆盖。另外,请查看
apply。此外,solve是一个函数。您将其用作矩阵名称? -
@RichardScriven,虽然这个问题的措辞并不出色,但我认为这个问题本身很酷。当然
apply不能真正做到这一点,因为跨行/列依赖(如果可以的话,我很好奇apply将如何完成)。 -
@BrodieG 和 OP,如果出现错误的方式,我们深表歉意。我刚刚提到可以为新的
TF值分配一个新变量,我对您对solve的使用感到困惑。这是一个非常有趣的问题。 -
@RichardScriven,就我而言没问题。
-
是的,我使用 solve 作为矩阵的名称。会改变的,谢谢。如果你们有兴趣,我会让你们了解最新进展,或者也对代码提出问题和答案。我已经编写了代码,但我只是在改进它以提高工作效率。