现有分块矩阵f2,想对其中的每一个小矩阵求对角线之和(求迹),再放到新的矩阵f3的对应位置上(或者也可以用这些值生成一个新的4*4矩阵,只要对应到位置上就行)。f2中的每一个小矩阵的位置就是f3矩阵元的位置。
我现在的代码用了两层嵌套循环实现,我想问下大佬有没有内置函数,不用循环的方法(或者比现在快一点的)一次性求出来并放到对应位置上。
因为我现在这个只是简单写了几个数字试一下这个代码,倒是试不出运行速度来,但是实际实验的程序已经嵌套了好几层循环了,不想再往里加循环,且实验的数据就不是简单的这几个数了,有复数且矩阵维度较大。所以想找一个快捷的方法,最好不用循环嵌套
A=({
{1, 2},
{2, 3}
});
B=({
{2, 1},
{3, 2}
});
F=({
{4, 1},
{5, 2}
});
f1=KroneckerProduct[KroneckerProduct[A,B],F];
f1//MatrixForm
f2=BlockMap[Sequence,f1,{2,2}];
f2//MatrixForm
f3=({
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
});
Nest[(
Nest[(
f3[[i,j]]=Tr[f2[[i,j]]];
j++
)&,j=1,4];
i++
)&,i=1,4];
f3//MatrixForm
我现在的代码用了两层嵌套循环实现,我想问下大佬有没有内置函数,不用循环的方法(或者比现在快一点的)一次性求出来并放到对应位置上。
因为我现在这个只是简单写了几个数字试一下这个代码,倒是试不出运行速度来,但是实际实验的程序已经嵌套了好几层循环了,不想再往里加循环,且实验的数据就不是简单的这几个数了,有复数且矩阵维度较大。所以想找一个快捷的方法,最好不用循环嵌套
A=({
{1, 2},
{2, 3}
});
B=({
{2, 1},
{3, 2}
});
F=({
{4, 1},
{5, 2}
});
f1=KroneckerProduct[KroneckerProduct[A,B],F];
f1//MatrixForm
f2=BlockMap[Sequence,f1,{2,2}];
f2//MatrixForm
f3=({
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
});
Nest[(
Nest[(
f3[[i,j]]=Tr[f2[[i,j]]];
j++
)&,j=1,4];
i++
)&,i=1,4];
f3//MatrixForm