matlab - 矢量化:矩阵数组乘法逐个元素

标签 matlab vectorization

我有一个矩阵:

R = [0 -1;1 0];

array = 1:1:10;

还有 x0 = [2;1]

如何在没有循环的情况下以最有效的方式获取另一个数组?

array2 = [expm(1*R) expm(2*R) expm(3*R) .... expm(10*R)];

然后我想获得 array3 的 2 维 10 使得:

array3 = [expm(1*R)*x0 expm(2*R)*x0 expm(3*R)*x0 .... expm(10*R)*x0];

最佳答案

来自 wikipedia :

If a matrix is diagonal its exponential can be obtained by exponentiating each entry on the main diagonal.

鉴于可以从 {1*R, 2*R,...} 创建 block 对角矩阵,那么可以获取其指数并将其整形为 [2 * n ] 并且它可以乘以 x0。 但是它的性能可能比 for 循环差。

R = [0 -1;1 0];
array = 1:1:10;
x0 = [2;1]
n = numel(array);
result = reshape(expm(kron(spdiags(array.',0,n,n),R))*repmat(x0,n,1),2,[]);

对于小尺寸(小于 70 个元素)的数组,全矩阵更有效:

result = reshape(expm(kron(diag(array),R))*repmat(x0,n,1),2,[]);

关于matlab - 矢量化:矩阵数组乘法逐个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44992537/

相关文章:

matlab - 在特定时间绘制垂直线

matlab - 3d 灰度体积投影到 2D 平面上

matlab - 以一定的偏移量向左和向右扩展列向量以形成二维矩阵 - MATLAB

matlab - 如何矢量化这个 for loop matlab

c++ - 这是矢量化的好做法吗?

python - 在没有 scipy.sparse 的情况下向量化稀疏和

r - R data.table 单元格的矢量化分配,列按行不同

python - 使用 Python 的 Popen 类从 Django 调用 Matlab 脚本

matlab - 如何在 Matlab 中重载用户定义的函数?

image - 区分单连通图形?