Matlab,生成新矩阵

时间:2014-05-15 23:27:26

标签: matlab matrix

如何将A [(N)x(N)]的矩阵转换为矩阵B [(2N)x(2N)],这样:

if A(i,j)>=0, then:
B(i,j) = [ A(i,j) 0
           0      A(i,j)]

if A(i,j)<0, then:
B(i,j) = [ 0       A(i,j)
           A(i,j)  0    ]

?

例如:by:

1  2
3  4

我想得到:

1 0 2 0
0 1 0 2
3 0 4 0
0 3 0 4

例如:by:

1  -2
3  -4

我想得到:

1 0 0 2
0 1 2 0
3 0 0 4
0 3 4 0

2 个答案:

答案 0 :(得分:3)

使用Kronecker tensor product

B = kron(A.*(A>=0), [1 0; 0 1]) + kron(A.*(A<0), [0 1; 1 0]);

或者

B = kron(A.*(A>=0), [1 0; 0 1]) - kron(A.*(A<0), [0 1; 1 0]);

如果您想要所有正值(您的示例和您的原始配方不同意)

答案 1 :(得分:1)

使用逻辑条件非常简单:

B=[A.*(A>=0), A.*(A<0) ; A.*(A<0), A.*(A>=0)];

例如,

A=[1 2 ; -3 4];

B =

 1     2     0     0
 0     4    -3     0
 0     0     1     2
-3     0     0     4

Postscipt:

这个答案是为了回答上面的问题而写的:

How do you translate matrix of A [(N) x (N)] to matrix B [(2N) x (2N)], such that:

if A(i,j)>=0, then:
B(i,j) = [ A(i,j) 0
           0      A(i,j)]

if A(i,j)<0, then:
B(i,j) = [ 0       A(i,j)
           A(i,j)  0    ]

?
后来,OP写下了一些例子,清楚地说明了他们所追求的是什么。