假设我有一个矩阵A
这是(m x n)
和一个向量B
这是(m x 1)
。这个向量B
是一个由 0 和 1 组成的向量。
还让标量s
是其中元素的总和B
.
我想创建一个矩阵C
这是s x n
对应于行B
等于 1,并且是一个向量D
即 s x 1,这些元素的位置在A
.
Take as an example:
A = [1, 2, 3;
4, 5, 6;
7, 8, 9;
10, 11, 12;
13, 14, 15 ]
B = [0; 1; 0; 1; 1]
Then:
C = [ 4, 5, 6;
10, 11, 12;
13, 14, 15 ]
and
D = [2;
4
5]
到目前为止,我的 Fortran 代码如下所示:
PROGRAM test1
IMPLICIT NONE
REAL, DIMENSION(5,3) :: A
INTEGER, DIMENSION(5,1) :: B = 0
INTEGER :: i, j, k
k = 1
!Create A matrix
do i=1,5
do j=1,3
A(i,j) = k
k = k+1
end do
end do
!Create B matrix
B(2,1) = 1
B(4,1) = 1
B(5,1) = 1
end program
在 matlab 中,我可以简单地通过创建 C = A(逻辑(B),:) 和 D 以类似的方式创建 C。
我怎样才能在 Fortran 中做到这一点,避免循环?我已经调查过where
and forall
陈述,但它们并不完全是我正在寻找的。