我想把矩阵的上三角部分转换成向量。
例如,我有以下矩阵(为了简单起见,4x4):
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16 1 2 3 4 6 7 8 11 12
1 2 6 3 7 11 4 8 12
谢谢你的帮忙!
编辑的:下面是生成标识矩阵的代码:
program main
use constants ! global vairables and conventional constants
use trans ! transformation between different frames
implicit none
integer :: ii, ij
real*8,dimension(4,4) :: R_reg
!call cpu_time(tic)
write(*,*) "check1" !check-point
!creating diagonal unity matrix
DO ii = 1, 4
DO ij = 1, 4
R_reg(ij,ii) = (ij/ii)*(ii/ij) !integer division
END DO
END DO
write(*,*) "check2" !check-point
!create the test .txt file:
open(50, file='R_reg.txt', status='replace')
DO ii=1, 4
write(50,*) R_reg(ii,:)
END DO
close(50)
write(*,*) "check3" !check-point
end program发布于 2022-04-05 15:10:12
如前所述,可以逐行或逐列选择所需的元素。使用数组构造函数时,不必担心至少跟踪一个索引:
implicit none
integer, parameter :: N=4
integer A(N,N), i, j
A = reshape([(i,i=1,N**2)], [N, N], order=[2,1])
print '("Matrix:")'
do i=1,N
print '(*(I5))', A(i,:)
end do
print '(/,"By rows:",/,*(I5))', [((A(i,j), j=i,N), i=1,N)]
print '(/,"By columns:",/,*(I5))', [((A(j,i), j=1,i), i=1,N)]
end program要将上三角部件存储在数组中,可以轻松地将数组构造函数分配给可分配的秩-1数组,而不是简单地打印。
发布于 2022-04-05 14:04:03
它实际上只是按照正确的顺序遍历数组,并存储您所遍历的元素。可能只需要做一些实验就可以得到正确的循环边界。
integer : n
real*8,dimension(10) :: ut_c, ut_r
DO ii = 1, 4
DO ij = 1, 4
R_reg(ij,ii) = ii + (ij-1)*4
END DO
END DO
n = 0
DO ij = 1, 4
DO ii = ij, 4
n = n + 1
ut_r(n) = R_reg(ij,ii)
END DO
END DO
n = 0
DO ii = 1, 4
DO ij = 1, ii
n = n + 1
ut_c(n) = R_reg(ij,ii)
END DO
END DO
print *, "rows:", ut_r
print *, "columns:", ut_c注意,real*8语法不是标准的Fortran。见Fortran: integer*4 vs integer(4) vs integer(kind=4)和Fortran 90 kind parameter
发布于 2022-04-05 18:51:45
尽可能简明扼要地“按行”:
[(R_reg(i, i:), i=1, 4)]和“由科尔”:
[(R_reg(:i, i), i=1, 4)]https://stackoverflow.com/questions/71752135
复制相似问题