Matlab中实现Mathematica Table等价功能及代码向量化方法
向量化实现生成max(i,j)矩阵的Matlab方法
要将你给出的双重循环代码向量化,同时实现Mathematica中Table[Max[i,j],{i,1,n},{j,1,n}]的等价功能,有以下几种简洁高效的方式:
方法1:结合meshgrid与max函数
利用meshgrid生成i和j的全量矩阵,直接逐元素取最大值:
[i,j] = meshgrid(1:n); m = max(i,j);
meshgrid(1:n)会生成两个n×n矩阵:i的每行都是1:n,j的每列都是1:n,max(i,j)会对每个位置的元素两两比较,直接得到目标矩阵。
方法2:利用Matlab的广播特性(R2016b及以上版本)
无需meshgrid,通过列向量与行向量的自动广播实现:
m = max((1:n)', 1:n);
(1:n)'是n×1的列向量,1:n是1×n的行向量,Matlab会自动将两者扩展为n×n矩阵,再逐元素取最大值,代码更简洁。
方法3:基于三角矩阵构造(进阶思路)
利用max(i,j)的特性:当i≥j时取i,j>i时取j,通过三角矩阵组合实现:
m = triu(ones(n,n).*(1:n)) + tril(ones(n,n).*(1:n)', -1);
triu生成上三角矩阵(含对角线),填充每行的j值;tril(..., -1)生成不含对角线的下三角矩阵,填充每列的i值,两者相加得到目标矩阵。
以上方法均实现了向量化,避免了循环,在n较大时比原循环代码效率更高。
内容的提问来源于stack exchange,提问作者the_wicked
相关产品推荐
相关产品推荐

