[英]Matrix multiplication java 1.8
您認為在Java 1.8中使用新的Stream接口實現稀疏矩陣運算是否可行? 如果是,我們如何實現矩陣和操作。 顯然,我正在尋找能夠最終使用“自動”並行化。
它可以清楚地完成。 對於簡單的SPMV(稀疏矩陣向量乘法),下面的內容怎么樣,稀疏矩陣以坐標COO格式表示(最簡單的稀疏格式):
class COO {
int x, y, value;
}
public static ArrayList<Integer> spmv(List<COO> values, ArrayList<Integer> v) {
final ArrayList<Integer> result = new ArrayList<>(Collections.nCopies(v.size(), 0));
values.stream().forEach(
coo -> result.set(coo.x, result.get(coo.x) + coo.value * v.get(coo.y))
);
return result;
}
但我真誠地建議你使用預先編碼的東西,如果你不想在接下來的3年里花一些時間來理解稀疏矩陣運算的性能影響。 這是一個相當大的研究/優化主題,有許多因素需要考慮(僅僅是我的頭腦):
與手工制作的實現相比,有許多實現可以實現性能的數量級改進。 僅舉幾例,請查看:
如果它們不存在,我會寫那些綁定到那些,雖然類似la4j看起來很有希望。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.