有人请告诉我如何将此代码从迭代更改为矢量化实现以加快Matlab中的性能?目前,我的机器i
每i=1:20
个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
大约需要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
答案 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