作者ogamenewbie (._.)
看板java
标题Re: [问题] 产生稀疏矩阵及稀疏矩阵相乘?
时间Wed Aug 8 22:05:18 2007
※ 引述《kians (临兵斗者皆阵列在前)》之铭言:
: 如题,最近因为研究需要,要测试电脑是否有办法计算两个一万X一万的矩阵相乘
: 普通的矩阵好像不行a....不过我要测的是稀疏矩阵
: 好像C/C++跟Fortran都有支援稀疏矩阵的算法
: 不过我只会java 所以来请教一下各位了orz
: 1.如何产生稀疏矩阵?
: 因为我才刚学java没多久,所以用了能想到最直觉的方法,
: 也就是跑两次巢状回圈,第一次给random值(0~1),这麽一来应该会有一半左右的值为0
: 接着第二次巢状回圈把原本矩阵中为1的值再给一次random值(0~9),
: 这麽一来最简单的稀疏矩阵写法便完成了orz
: 请问有更好的写稀疏矩阵的方法吗?一半以上的值为0的矩阵应该就是稀疏矩阵了吧
void laranda(int x, int y, int howsparse, int howlarge) {
Random ran = new Random();
int iamblow = ran.nextInt(howsparse);
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
iamblow--;
if(iamblow < 0) {
iamblow = ran.nextInt(howsparse);
shamewagogi[i][j] = ran.nextInt(howlarge)
}
}
}
}
大概不能跑吧? 反正简单来说就是差个倒数炸弹, 爆了就看伤亡数字这样.
: 2.两个矩阵相乘的写法??
: 如果只是 data3[i][j] == data1[i][j]*data2[i][j] 这样的话我是会写啦
: 不过矩阵相乘应该不是这样乘的吧orz,请问矩阵相乘的程式怎麽写呢?
我 google 了一下矩阵相乘, 因为其实我没玩过
第一个连结告诉我说三个 for 回圈就好了..
第二个连结告诉我说这个东西我短时间用不到, 所以我就没细看了..
http://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95
: 3.两个大量稀疏矩阵相乘的写法?
(中略)
: 这样的方法可以帮助用来计算稀疏矩阵吗? 因为计算时还是要转回来吧
: 所以感觉对"计算"好像没有很大帮助orz
: 抱歉问题很多 麻烦java高手们解惑了
没有必要一定要转回来阿..
以两层 hashmap 的情况来说的话...
你可以用 Iterator 去两个对绕...
...
我这样会不会黑话太严重了?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.148.49