返回信息流记得是高锦春教C++时问的,当时定义了一个Matrix类,要实现两个Matrix相加,MS没有什么好的办法~说是存在一大堆问题。不过现在我算懂了一些。
有没有人对这个问题有研究过,跟我讨论一下?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #16062同步于 2007/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[讨论] 简单问个问题,如果高效地让两具矩阵相加?
Jarod
2007/3/26镜像同步43 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我记得我做过一个
好像是用数组
【 在 Jarod 的大作中提到: 】
: 记得是高锦春教C++时问的,当时定义了一个Matrix类,要实现两个Matrix相加,MS没有什么好的办法~说是存在一大堆问题。不过现在我算懂了一些。
: 有没有人对这个问题有研究过,跟我讨论一下?
当时这么做的。。。
【 在 Jarod 的大作中提到: 】
: 记得是高锦春教C++时问的,当时定义了一个Matrix类,要实现两个Matrix相加,MS没有什么好的办法~说是存在一大堆问题。不过现在我算懂了一些。
: 有没有人对这个问题有研究过,跟我讨论一下?
矩阵相加??
a*b + a*b??
【 在 Jarod (美牙~~) 的大作中提到: 】
: 记得是高锦春教C++时问的,当时定义了一个Matrix类,要实现两个Matrix相加,MS没有什么好的办法~说是存在一大堆问题。不过现在我算懂了一些。
: 有没有人对这个问题有研究过,跟我讨论一下?
确认一下, 对于一个 N 维矩阵, 相加是指
C[X1][X2]..[Xn] = A[X1][X2]..[Xn] + B[X1][X2]..[Xn]
吧, 那么我想对于这种运算来说, 似乎很难从算法上进行优化, 那么不妨从其它方面考虑. 比如提到过的 sse2 就是一种方案. 对于多核处理器来说, 用多线程进行运算也可以提速. 如果能够利用显卡的矩阵运算功能 (假如它有, 而且也许某些 CPU 本身也有 DSP 单元, 比如 ARM 的 E 变种. 不过这方面我不了解, 只隐约记得看过一些介绍) 那么似乎更好
你说得太低层了。如果用这么低层的东西,那编程就不方便了。还不如使用intel的数学库来得快了。
我贴个有问题的代码吧:
class Matrix {
private:
int M,N;
double * element;
public:
Matrix(int m, int n): M(m),N(n) {
element = new double[M*N]; }
~Matrix(){ if (element) delete []element; }
double & operator ()(int i, int j) const {
return element[i*N+j]; }
// other…
};
Matrix operator + (const Matrix & a, const Matrix & b) {
int M = a.getM(), N = a.getN();
Matrix result(M,N);
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
result(i,j) = A(i,j) + B(i,j);
}
}
return result;
}
Matrix A(3,4), B(3,4), C(3,4);
C = A+B;
以上代码省略了一些构造、赋值函数,但能看明白吧。
这个种代码效率并不高。
【 在 RemoteFish 的大作中提到: 】
: 确认一下, 对于一个 N 维矩阵, 相加是指
: C[X1][X2]..[Xn] = A[X1][X2]..[Xn] + B[X1][X2]..[Xn]
: 吧, 那么我想对于这种运算来说, 似乎很难从算法上进行优化, 那么不妨从其它方面考虑. 比如提到过的 sse2 就是一种方案. 对于多核处理器来说, 用多线程进行运算也可以提速. 如果能够利用显卡的矩阵运算功能 (假如它有, 而且也许某些 CPU 本身也有 DSP 单元, 比如 ARM 的 E 变种. 不过这方面我不了解, 只隐约记得看过一些介绍) 那么似乎更好