【问题标题】:Fortran: multiplication with matrices only containing +1 and -1 as entriesFortran:与仅包含 +1 和 -1 作为条目的矩阵相乘
【发布时间】:2011-08-27 16:15:35
【问题描述】:

在 fortran9x 中乘以任意 M x N 矩阵(例如 A,仅包含 +1 和 -1 作为其条目(以及完全填充!),具有任意(密集)N维向量,v?

非常感谢, 灵眸

附: A 的大小(即 M 和 N)在编译时是未知的。

【问题讨论】:

    标签: vector matrix fortran multiplication


    【解决方案1】:

    我的猜测是只做乘法而不是通过检查矩阵元素的符号并相应地加/减来避免乘法会更快。因此,只需使用一般优化的矩阵向量乘法例程。例如。来自 BLAS 的 xGEMV。

    【讨论】:

    • 珍妮布,谢谢。在自己尝试想出一个“聪明”的解决方案后,我也得出了同样的结论。我现在想知道是否提前知道矩阵 A 是否重要?为了提供上下文,假设 A - 在预期的应用程序中通常很大但“瘦”,例如 (10^4 到 10^6) x (2 到 12) - 生成(在 Matlab 表示法中)为 A = sign( randn(1e5,6)) (A 需要拥有一个“随机”字符)并在迭代算法中重复使用,但不(重新)生成。
    • 那不是 xGEMV 例程吗?
    • 斯蒂伯特,感谢您的评论。你是对的,blas2 例程 xGEMV 通常更适合执行“优化”矩阵向量乘积。然而,我想知道的是,如果矩阵的特殊结构(只有 +1 和 -1 作为条目)可能会带来一些优势,可能会假设“提前”对 A 的“全部”知识(也许是一个“愚蠢”的想法,但我想知道在这种情况下“预编译”(一部分)matvec 计算是否可能,如果是肯定的,它会导致任何有效的事情,至少在计算时间方面)。再次感谢。
    • @Osmo Bajric - 矩阵是否有任何其他特殊特征(可能是对称的或类似的东西)?充满零的矩阵可以作为特例,但+1和-1只是数字;我不熟悉将这些视为特殊情况的任何功能。对于计算机而言,+1 和 +3 是一回事。
    • Rook,感谢您的加入。不,该矩阵通常没有特殊的结构/特征,除了以(准)随机方式填充,具有+1和-1(对于某些强大但仍未广为人知的线性迭代求解器所需的“稳健性”/便利性例如,ML(k)BiCGStab 或 IDR(s))。注:只是为了避免可能的混淆,这里的瘦 A 不是来自 A*x=b 的 A,而是在迭代方案中形成(某些)残差向量的(线性独立的)“阴影”矩阵(sign(randn(m, n) 对于 m>>n 通常会产生一个条件良好的矩阵)。问候。
    【解决方案2】:

    根据使用场景,如果您必须多次应用相同的矩阵,您可能会将其分成两部分,一部分包含正项,另一部分包含负项。 有了这个,你可以避免乘法的需要,但是它会引入一个间接,这可能比乘法更昂贵。 因此,janneb 的解决方案可能是最合适的。

    【讨论】:

    • Haraldkl,感谢您的评论。我(相信)我明白你在说什么。尽管如此,我仍然“感觉”在 Av 的这种特殊情况下,通用 Blas 例程应该更有效,其中 A 是 MxN,Mx=b。一个想法只是我脑海中的案例,我'我会尝试解决这个问题,并将我的发现发布在这里(以及在 LinkedIn,尽管使用我的真名),除非这个想法没有那么有希望。
    猜你喜欢
    • 2015-12-30
    • 2015-01-24
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多