arrays - 通过在元胞数组中存储为向量的索引对向量的子集求和

标签 arrays matlab vectorization

L 是一个单元格。

L=
 2,4,6   % j=1
 1,6,8   % j=2
 4,6     % j=3

r 是一个 1x8 向量:

23 1 24 5 4 3 7 8

我想向量化这段代码:

UC=zeros(1,J);
for j=1:J
    if ~isempty(L{j})                      
        UC(j)=sum(r(L{j}));
    end
end

我试过这个:

UC = arrayfun(@(x)r(x), L, 1, 'UniformOutput', false);

但看起来细胞不适合这个功能。

Error using subsindex
Function 'subsindex' is not defined for values of class 'cell'.

最佳答案

这篇文章中列出的是一种几乎基于accumarray 的矢量化方法。 .我将其称为几乎矢量化,因为它使用 cellfun这并不是真正的矢量化方式,但由于它仅使用它来查找每个单元格的长度,因此其影响很小。这是实现-

lens = cellfun('length',L)
id = zeros(1,sum(lens))
id([1 cumsum(lens(1:end-1))+1]) = 1;
out = accumarray(cumsum(id(:)),r([L{:}]))

关于arrays - 通过在元胞数组中存储为向量的索引对向量的子集求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372137/

相关文章:

c - 在 C 中查找数组中的 n 个重复数字

numpy - 使用矢量化将函数应用于 Numpy 二维数组中的每一行

matlab - 获取对称矩阵的特征值和特征向量的简单Lanczos算法代码

matlab - 加快查找值之间的元素数 Matlab

c - 性能 AVX-512 与 MIC 上的自动矢量化(英特尔至强融核协处理器)

r - 查找字符串和长字符串向量之间的最小汉明距离(快速)

arrays - 最大化所有可能子数组的特定总和

c - for循环中的int i不改变地址(c语言)

javascript - 从一维数组创建二维数组

matlab - 在matlab中求解矩阵方程