我正在使用MathJS在我的节点打字稿应用程序中处理矩阵。我正在使用的矩阵将很大 - 每个高度和宽度大约为 256 * 10。在一系列时间步长上,我将为矩阵中的某些位置分配一个值 - 比如 1、-1 等等上。例如,在初始化矩阵时:
const matrix = math.zeros(512, 512, 'sparse');
matrix.set([someX, someY], 1);
随着每个时间步迭代的开始,我需要一种方法来知道矩阵中的哪些位置已经具有上一个时间步的给定值。然后我会在矩阵中找到它们的邻居,并进行一些计算,这可能会导致某些邻居也被设置为新值。我可以用矩阵的forEach
函数来做到这一点:
// on each timestep of my algorithm:
matrix.forEach( function(value, index) {
if (value === 1){
// console.log(index)
// find the neighbors of the value
// perform some calculations
// perhaps set some of the neighbors to 1, or -1, etc
}
})
但是,这种forEach
方法不是一个好主意!我看到 javascript 引擎正试图遍历矩阵中的 512x512 位置,只是为了找到值为 1 的位置 - 并且它会永远占用。考虑到我想尽可能快地多次迭代我的算法,这不是要走的路。
如何快速获取value === x
矩阵中所有人的位置?
我也对 MathJS 之外的解决方案持开放态度。
我正在考虑必须单独跟踪这一点,如下所示:
const ones = [];
const position = [someX, someY];
matrix.set(position, 1);
ones.push(position);
尽管我觉得这是跟踪随时间变化的矩阵值的一种笨拙且不直观的方式。