【问题标题】:Matrix integral operation, avoiding loops矩阵积分运算,避免循环
【发布时间】:2015-12-26 02:30:51
【问题描述】:

我有一个矩阵 (15000*3000) 目标是根据原始矩阵有条件地分配新值。例如,我想实现的标准是这样的:

这就是我现在的代码设置方式。

for( i in 1:2000 ) {
    for( j in 1:15000 ) {
        if(DF[j,i]>0 && DF[j-1,i]<0) DF1[j,i]=1 
        else if (DF[j,i]<0 && DF[j-1,i]>0) DF1[j,i]=0
    }
}

DF 是原始矩阵。

DF1 是新形成的矩阵

还有其他方法可以做到这一点吗?更快的方法?

我已经读到应该避免 R 中的循环。

【问题讨论】:

  • tx 是什么?您是否打算输入ij
  • DF1[DF[-1,]&gt;0 &amp; DF[-nrow(DF),] &lt; 0] &lt;- 1 等怎么样?
  • 对不起我的粗心大意。if(DF[j,i]>0 &&DF[j-1,i]0) DF1[j,i]=0
  • 非常感谢!很有用。
  • 如何将其发布为答案?如果马拉不想,那小熊自己来回答……

标签: r matrix


【解决方案1】:
DF1[-1,][DF[-1,]>0 & DF[-nrow(DF),] < 0] <- 1
DF1[-1,][DF[-1,]<0 & DF[-nrow(DF),] > 0] <- 0

由于两个矩阵(DF1,[DF[-1,]&gt;0 &amp; DF[-nrow(DF),] &lt; 0])的维度不同,所以存在问题 DF1[DF[-1,]&gt;0 &amp; DF[-nrow(DF),] &lt; 0] &lt;- 1.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2017-08-06
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多