Matrix 将向量插入特定列的矩阵中
如何在列col处将向量b插入矩阵?我在Fortran中找不到and insert或append函数的任何语法 到目前为止,我所做的只是重新分配列中的值,但我只想插入向量Matrix 将向量插入特定列的矩阵中,matrix,fortran,gfortran,Matrix,Fortran,Gfortran,如何在列col处将向量b插入矩阵?我在Fortran中找不到and insert或append函数的任何语法 到目前为止,我所做的只是重新分配列中的值,但我只想插入向量 real :: M(n,n) integer :: n, col real :: b(n) M(n:col) = b(:) 如果我了解你的问题,你想: 将矩阵m的列数n增加1 在索引col处,将向量b的内容作为新列插入m中 将m的其余列右移,以免丢失任何数据 在这种情况下,您需要做几件事: 如果要在本地更新数据,矩阵m
real :: M(n,n)
integer :: n, col
real :: b(n)
M(n:col) = b(:)
如果我了解你的问题,你想:
- 将矩阵
的列数m
增加1李>n
- 在索引
处,将向量col
的内容作为新列插入b
中李>m
- 将
的其余列右移,以免丢失任何数据m
- 如果要在本地更新数据,矩阵
必须是m
。如果您希望返回一个新的独立数组,则无需执行此操作(但会创建一个额外的数据副本)可分配的
- 最好使用至少符合2003标准的编译器,这样您就可以访问内在的
,从而避免在重维度中复制一个数组move\u alloc
program insert_vec
integer, allocatable :: m(:, :), b(:)
integer :: n = 3, col = 2, i
allocate(m(n, n))
allocate(b(n))
m = 10
b = [(i, i = 1, n)]
call insert(m, b, col)
do i = 1, n
print *, m(i, :)
end do
contains
subroutine insert(m, b, col)
integer, allocatable, intent(inout) :: m(:, :)
integer, intent(in) :: b(size(m, 1)), col
integer, allocatable :: temp(:, :)
integer :: rows, cols
rows = size(m, 1)
cols = size(m, 2)
allocate(temp(rows, cols + 1))
temp(:, 1:col) = m(:, 1:col)
temp(:, col) = b
temp(:, col + 1:cols + 1) = m(:, col:cols)
call move_alloc(temp, m)
end
end
我的输出是:
因此,当我正确理解它时,您希望在矩阵
M
中插入向量b
,其中M
的大小为nxn
,而b
的大小为n
。假设n@albert,我猜OP试图将矩阵M的一维增加1,然后在具有索引col的列上插入向量b,将所有列从索引col,…,n右移到col+1,…,n+1,为b腾出空间。是吗?@RodrigoRodrigues可能是这样,但我对这个问题不是100%清楚。在这种情况下,我们需要知道OP是如何声明M
矩阵的,OP请提供详细信息,阅读并提供一个。
10 1 10 10
10 2 10 10
10 3 10 10