我有一个(K x KM)矩阵A
,其中矩阵的第一个(K x K)元素A_1
是函数的第一个参数,最后一个M (K x K)元素A_M
是函数的最后一个输入。
M
是任意的,由矩阵A
上的大小决定。
我需要的是用于评估的MATLAB代码:
blkdiag(A_1,A_2,...,A_M)
我考虑使用sprintf
和eval
的循环,但这似乎效率低下。我发现的一个有效的解决方案是:
B = kron(ones(1,M),A')
for ii=1:size(B,1)
for jj=1:size(B,2)
if ii+jj in off diagonal block
B(ii,jj)=0;
end
end
end
但是我想要一些我不需要弄清楚循环的东西。
答案 0 :(得分:3)
一种选择是使用mat2cell
将单个矩阵收集到单元格数组的单独单元格中,然后将其作为blkdiag
传递给comma-separated list:
>> A = rand(3, 9)
A =
0.6892 0.0838 0.1524 0.9961 0.1067 0.7749 0.0844 0.8001 0.1818
0.7482 0.2290 0.8258 0.0782 0.9619 0.8173 0.3998 0.4314 0.2638
0.4505 0.9133 0.5383 0.4427 0.0046 0.8687 0.2599 0.9106 0.1455
>> [r, c] = size(A);
>> B = mat2cell(A, r, r.*ones(1, c/r));
>> B = blkdiag(B{:})
B =
0.6892 0.0838 0.1524 0 0 0 0 0 0
0.7482 0.2290 0.8258 0 0 0 0 0 0
0.4505 0.9133 0.5383 0 0 0 0 0 0
0 0 0 0.9961 0.1067 0.7749 0 0 0
0 0 0 0.0782 0.9619 0.8173 0 0 0
0 0 0 0.4427 0.0046 0.8687 0 0 0
0 0 0 0 0 0 0.0844 0.8001 0.1818
0 0 0 0 0 0 0.3998 0.4314 0.2638
0 0 0 0 0 0 0.2599 0.9106 0.1455
答案 1 :(得分:3)
这是另一种解决方案
crond[669]: (sh) ERROR (getpwnam() failed)