gpt4 book ai didi

matrix - 如何构造一个包含 9 个较小矩阵的矩阵

转载 作者:行者123 更新时间:2023-12-04 23:42:10 24 4
gpt4 key购买 nike

我有九个矩阵,其维度为 (N by N)A1(i,j),A2(i,j),A3(i,j),A4(i,j),A5(i,j),A6(i,j),A7(i,j),A8(i,j),A9(i,j)
然后我想构造一个更大的矩阵(3N x 3N),包括这九个矩阵:

A = [A1 A2 A3
A4 A5 A6
A7 A8 A9]

在fortran中,我可以使用命令行作为
do i=1,FN
do j=1,FML
A(i,j) = [A1(i,j),A2(i,j),A3(i,j);A4(i,j),A5(i,j),A6(i,j);A7(i,j),A8(i,j),A9(i,j)]
end do
end do

最佳答案

只是为了好玩,您还可以使用 do-loops 来制作大型 A 矩阵

do i = 1, N
A( i, : ) = [ A1( i,: ), A2( i,: ), A3( i,: ) ]
A( i + N, : ) = [ A4( i,: ), A5( i,: ), A6( i,: ) ]
A( i + N*2, : ) = [ A7( i,: ), A8( i,: ), A9( i,: ) ]
enddo

它以行主要方式填充 A 矩阵,因此小矩阵也以这种方式出现。如果真的有必要,这也可以写成单行
A = transpose( reshape(  &
[ ( [ A1( i,: ), A2( i,: ), A3( i,: ) ], i=1,N ), &
( [ A4( i,: ), A5( i,: ), A6( i,: ) ], i=1,N ), &
( [ A7( i,: ), A8( i,: ), A9( i,: ) ], i=1,N ) ], [N*3, N*3] ))

原来是@francescalus 答案中第二个数组构造函数的转置(单行形式)
A = reshape(  &
[ ( [ A1( :,i ), A4( :,i ), A7( :,i ) ], i=1,N ), &
( [ A2( :,i ), A5( :,i ), A8( :,i ) ], i=1,N ), &
( [ A3( :,i ), A6( :,i ), A9( :,i ) ], i=1,N ) ], [N*3, N*3] )

为了更进一步,我们可以定义 hcatvcat与其他语言一样的例程(注意这里需要显式接口(interface)):
function hcat( A, B, C ) result( X )
integer, dimension(:,:) :: A, B, C
integer :: X( size(A,1), size(A,2)+size(B,2)+size(C,2) )

X = reshape( [ A, B, C ], shape( X ) )
endfunction

function vcat( A, B, C ) result( X )
integer, dimension(:,:) :: A, B, C
integer :: X( size(A,1)+size(B,1)+size(C,1), size(A,2) )

X = transpose( reshape( &
[ transpose(A), transpose(B), transpose(C) ], &
[ size(X,2), size(X,1) ] ) )
endfunction

然后我们可以写
A = vcat( hcat( A1, A2, A3 ), hcat( A4, A5, A6 ), hcat( A7, A8, A9 ) )

这有点类似于问题中所需的形式:
A = [ A1 A2 A3 ; A4 A5 A6 ; A7 A8 A9 ]

关于matrix - 如何构造一个包含 9 个较小矩阵的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34262261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com