[已答复] 矩阵元素的替换

[复制链接]
ZYLwy0416 发表于 2021-10-11 20:51:38
本帖最后由 ZYLwy0416 于 2021-10-11 20:51 编辑

对于一个二元矩阵,每一列都有相同数目的元素1。比如每一列有两个1,其余为0的矩阵A,则构造一个2*2的矩阵B(哈达玛矩阵),将A中每一列的第一个1替换成B中的第1行,A中的每一列的第二个1替换成B中的第二行,每一列的0变成[0 0]。这个用代码怎么写呀,求帮忙:'(

2 条回复


TouAkira 发表于 2021-10-12 06:53:56
简单讲就是把原矩阵拆成两个矩阵之和,两个矩阵分别保有每列中的第一个1和第二个1,然后用克罗内克积构造
  1. N = 5;
  2. B = [ 3, 4; 5, 6 ];
  3. INDEX = cell2mat( arrayfun( @( ii ) [ randperm( N, 2 ).', ii * ones( 2, 1 ) ], [ 1 : 1 : N ], 'UniformOutput', false ).' );
  4. M = zeros( N, N );
  5. M( sub2ind( [ N, N ], INDEX( :, 1 ), INDEX( :, 2 ) ) ) = 1;
  6. disp( M ) % 原矩阵
  7. INDEX = cell2mat( arrayfun( @( ii ) find( M( :, ii ) == 1 ).', [ 1 : 1 : N ], 'UniformOutput', false ).' );
  8. Matrix_1 = zeros( N, N ); Matrix_2 = zeros( N, N );
  9. Matrix_1( sub2ind( [ N, N ], INDEX( :, 1 ), [ 1 : 1 : N ].' ) ) = 1; % 保有每列第一个1
  10. Matrix_2( sub2ind( [ N, N ], INDEX( :, 2 ), [ 1 : 1 : N ].' ) ) = 1; % 保有每列第二个1
  11. disp( kron( Matrix_1, B( 1, : ) ) + kron( Matrix_2, B( 2, : ) ) )
复制代码

原矩阵
     0     0     0     0     0
     0     1     0     0     1
     1     1     0     0     0
     1     0     1     1     0
     0     0     1     1     1
替换后
     0     0     0     0     0     0     0     0     0     0
     0     0     3     4     0     0     0     0     3     4
     3     4     5     6     0     0     0     0     0     0
     5     6     0     0     3     4     3     4     0     0
     0     0     0     0     5     6     5     6     5     6

ZYLwy0416 发表于 2021-10-12 14:45:09
TouAkira 发表于 2021-10-12 06:53
简单讲就是把原矩阵拆成两个矩阵之和,两个矩阵分别保有每列中的第一个1和第二个1,然后用克罗内克积构造

...

谢谢谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表