行列A
が(m x n)
であり、ベクトルB
が(m x 1)
であるとします。このベクトルB
は0と1のベクトルです。Fortran - 論理インデックス
B
の要素の合計をs
とします。
Iは1に等しくB
の行に対応s x n
ある行列C
を作成したい、とA
におけるそれらの要素の位置と、S×1ベクトルであるD
。類似でC = A(論理(B)、:)、およびD:
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コードがどのように見える今のように:MATLABで
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
Iは、単に行うことで、Cを作成することができ方法。
ループを回避するにはどうすればよいでしょうか?私はwhere
とforall
のステートメントを調べましたが、正確には私が探しているものではありません。
'PACK()'は検索の際にあなたの友人かもしれません。 – francescalus
[この例](http://stackoverflow.com/q/21208593)のように。より良いものが利用できるかもしれません、私は重複を示唆していません。 – francescalus