![]() |
1
15
您可以使用函数在一行中执行此操作
NUM2CELL
打破矩阵
结果
注: 我以前用的解决方案 MAT2CELL 而不是 NUM2单元 不是那么简单:
|
![]() |
2
16
作为个人偏好,我喜欢我的代码尽可能简洁易读。 以下是我将要做的,尽管它不满足您的“无循环”要求:
这将导致 A×D×C 矩阵 Z .
当然,您可以通过使用
|
![]() |
3
8
这是一个一行解决方案(如果要拆分为第三维度,则为两行):
因此现在:
说明:
上面的内容可能看起来很混乱,但这个想法很简单。
首先,我从三维开始
……困难在于
最后,我将它分解为第三个维度:
所以你可以看到它只需要一个矩阵乘法,但是你必须 重塑 前后矩阵。 |
![]() |
4
5
我正在处理完全相同的问题,并着眼于最有效的方法。我看到的方法大致有三种,除了使用外部库(即, mtimesx ):
我最近比较了这三种方法,看哪种方法最快。我的直觉是(2)会是赢家。代码如下:
所有三种方法产生相同的输出(phew!)但是,令人惊讶的是,这个循环是最快的:
请注意,从一个试验到另一个试验的时间变化很大,有时(2)是最慢的。随着数据的增加,这些差异变得更加显著。但与 许多的 更大的数据,(3)比(2)。循环方法仍然是最好的。
但是循环法 可以 如果环尺寸比其他尺寸大得多,则应慢于(2)。
所以(2)以一个大因素获胜,在这个(可能是极端的)情况下。可能并不是所有情况下都是最佳的方法,但是循环仍然很好,在许多情况下也是最佳的。在可读性方面也是最好的。走开! |
![]() |
5
1
不。有几种方法,但总是以循环的形式出现,直接的或间接的。 为了取悦我的好奇心,你为什么要那样做? |
![]() |
6
1
要回答这个问题, 和 有关可读性,请参见:
输入
例子
来源原始来源。我添加了内联注释。
|
![]() |
7
1
我强烈建议你使用 MMX toolbox MATLAB的。它可以尽可能快地将n维矩阵相乘。 的优势 MMX 是:
对于这个问题,只需编写以下命令:
这里是所有可能方法的基准。有关更多详细信息,请参阅 question .
|
![]() |
8
0
我会认为递归,但这是你唯一能做的其他非循环方法。 |
![]() |
9
0
您可以“展开”循环,即按顺序写出循环中可能发生的所有乘法。 |
![]() |
SH_IQ · 在MATLAB条形图中为特定条形图颜色添加其他图例 6 月前 |
![]() |
Vlad Vadean · Matlab数组乘法 6 月前 |
![]() |
Catalin Baba · 如何在MATLAB中连接两个向量 6 月前 |
![]() |
servoz · 在matlab和python中创建类似的矩阵对象 12 月前 |
![]() |
CircAnalyzer · MATLAB中字符串的十进制数列表 1 年前 |
![]() |
I Like Algebra · 在Julia中交换行的最简单方法 1 年前 |