【发布时间】:2016-05-11 21:56:45
【问题描述】:
假设我有一个矩阵A 是(m x n) 和一个向量B 这是(m x 1)。这个向量B 是一个由 0 和 1 组成的向量。
同样让标量 s 成为 B 中元素的总和。
我想创建一个矩阵C,它是s x n,对应于等于1的B的行,以及一个向量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:C = A(logical(B),:), and D 以类似的方式。
如何在 fortran 中做到这一点,避免循环?我查看了where 和forall 语句,但它们并不是我想要的。
【问题讨论】:
-
PACK()在搜索方面可能是您的朋友。 -
如this example。可能会有更好的,我不建议重复。
标签: indexing fortran logical-operators