【发布时间】:2020-06-28 04:46:23
【问题描述】:
我有两个矩阵相乘 HZ 其中两个矩阵 H 和 Z 的大小相同 (256,256) 。矩阵 Z 是置换矩阵,具有以下模式:在前 32 行中,只有列 1,9,17,...(256-8) 是非零,其他列是零,接下来 32 行,只有列 2,10,18,...(256-7) 是非零,其他列为零,依此类推,直到最后 32 行,其中列 8,16,24,....,256 为非零,其他列是零。
因此,将矩阵H与Z相乘仅包括将H中第一行的前32个元素相乘矩阵 Z 的第 1 列的第一个 32 元素,然后是矩阵 H 第一行的下一个 32 个元素,下一个 32Z中2列的/em>元素(33-64元素)等等。因为所有其他乘法将导致零。所以那样的话,乘法的次数会更少。
我的问题,我不能在 Matlab 中写出来!我不知道如何创建循环以仅通过非零元素。你能帮忙吗?
提前谢谢你。
【问题讨论】:
-
过早的优化是万恶之源。只需对所有元素使用正常的元素乘法。仅循环通过非零条目的效率要低得多
-
@SardarUsama 感谢您的回复。是的,这就是我需要做的?循环遍历 Z 的非零条目。我该怎么做?
-
“因此,矩阵 H 与 Z 相乘仅包含”...所以您是说 H*Z 会产生正确的结果,但您试图跳过 nzero 个?
-
你可以通过
find(any(M,2))获取非零元素的切片,其中2决定方向,即是列还是行 -
@Daniel 是的,正是……这就是我的意思
标签: matlab