在Matlab

时间:2017-03-01 23:47:02

标签: matlab performance vectorization

有人请告诉我如何将此代码从迭代更改为矢量化实现以加快Matlab中的性能?目前,我的机器ii=1:20classEachWordCount = zeros(nwords_train, nClasses); for i=1:nClasses % (20 classes) for j=1:nwords_train % (53975 words) classEachWordCount(j,i) = sum(groupedXtrain{i}(groupedXtrain{i}(:,2)==j,3)); end end 大约需要8秒。

groupedXtrain

如果上下文有用,document#,word#,wordcount是一个20个矩阵的单元,表示不同的类,其中每个类矩阵有3列:classEachWordCount和不等数量的行(数万)。我想弄清楚每个班级每个单词的计数总数。因此53975x20应为大小为groupedXtrain{1}的矩阵,其中每行代表不同的字,每列代表不同的标签。必须有一个内置功能来协助这样的事情,对吗?

例如doc#,word#,wordcount 1 1 3 1 2 1 1 4 3 1 5 1 1 8 2 2 2 1 2 5 4 2 6 2 可能会开始:

PartitionKey

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,您可以使用accumarray对每个类的第二列中每个唯一值的第三列中的值进行总结

results = zeros(nwords_train, numel(groupedXtrain));

for k = 1:numel(groupedXtrain)
    results(:,k) = accumarray(groupedXtrain{k}(:,2), groupedXtrain{k}(:,3), ...
                              [nwords_train 1], @sum);
end