小编bil*_*ill的帖子

如何加速Mathematica替换矩阵元素

我有几个100x15矩阵; 其中一个是距离.当该矩阵的元素超过一个边界时,我想将这些元素重置为零,并将其他三个矩阵的相应元素重置为零.这是我的愚蠢方式(但它有效):

Do[ If[ xnow[[i, j]] > L, xnow[[i, j]] = 0.;
                  cellactvA[[i, j ]]  = 0.;
                  cellactvB[[i, j ]]  = 0.;
                  cellactvC[[i, j ]]  = 0.;   ], (* endIF  *)
   { i, 1, nstrips}, {j, 1, ncells}       ];  (* endDO *)
Run Code Online (Sandbox Code Playgroud)

我试过了ReplacePart:

 xnow = ReplacePart[ xnow, Position[ xnow, x_?(# > L &) ] ]
Run Code Online (Sandbox Code Playgroud)

(类似这样的东西,我没有得心应用;它已经足够正确地执行了),但是它和循环一样慢并且没有在矩阵xnow中产生正确的替换结构.请告知如何以相当快的方式执行此操作,因为此计算是在执行多次的另一个循环(随着时间的推移)内.当然,整体计算现在非常缓慢.提前致谢.


以下是我在R中的表现; 非常简单快捷:

    # -- find indices of cells outside window
indxoutRW  <- which( xnow > L, arr.ind=T )

    # -- reset cells …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

10
推荐指数
2
解决办法
1983
查看次数

标签 统计

wolfram-mathematica ×1