【发布时间】:2017-03-01 23:47:01
【问题描述】:
有人能告诉我如何将这段代码从迭代实现更改为矢量化实现,以提高 Matlab 的性能吗?目前在我的机器上,i=1:20 的每个 i 大约需要 8 秒。
classEachWordCount = 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
如果上下文有帮助,groupedXtrain 是一个由 20 个矩阵组成的单元格,它们代表不同的类,其中每个类矩阵有 3 列:document#,word#,wordcount,并且行数不相等(数万)。我正在尝试计算每个班级的每个单词的总数。所以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
【问题讨论】:
-
看起来像是
accumarray的工作 -
谢谢,看起来很有希望,我会调查一下
标签: matlab performance vectorization