我需要创建一个稀疏的3d张量,目前使用的是包裹张量。作为输入,我们需要
sptensor(idx, vals, dims)
idx 是(x,y,z), vals 中相应值的张量索引。 dims 是张量的总尺寸。
在我的 idx 列表中,我有重复的索引。我需要的是 vals 中的值随着每次出现而增加。因此,对于 idx 列表中的每个值, vals 为1,但当 idx 中的条目与先前计数的条目重复时,则val应该线性增加(因此,如果2次出现相同的指数,则 vals 为2,如果发生3次则为3次等)。
简单可重复的样本:
idx <- list(c(1,1,2),c(2,2,2),c(1,1,2), c(1,2,1),c(1,1,2))
vals <- integer(5)+1
dims <- c(2,2,2)
sptensor(idx,vals,dims)
<A 2x2x2 sparse tensor with 3 non-zero entries>
subs: <1,2,1> <1,1,2> <2,2,2>
vals: 1 1 1
但是在这里我需要 vals 输出为vals:1 3 1,因为索引发生了3次。
起初我考虑使用重复,因此vals作为全零启动。然后,在索引!重复(idx),我们添加+1。然后在索引重复(idx)我们添加另一个+1。但是当我们有超过2次出现相同指数时,这种策略会崩溃。
任何人都有个好主意?