@@ -1333,23 +1333,13 @@ def spectral_angles(data, members):
13331333 assert members .shape [1 ] == data .shape [2 ], \
13341334 'Matrix dimensions are not aligned.'
13351335
1336- (M , N , B ) = data .shape
13371336 m = np .array (members , np .float64 )
1338- C = m .shape [0 ]
1339-
1340- # Normalize endmembers
1341- for i in range (C ):
1342- m [i ] /= np .sqrt (m [i ].dot (m [i ]))
1337+ m /= np .sqrt (np .einsum ('ij,ij->i' , m , m ))[:, np .newaxis ]
13431338
1344- angles = np .zeros ((M , N , C ), np .float64 )
1345-
1346- for i in range (M ):
1347- for j in range (N ):
1348- v = data [i , j ].astype (float )
1349- v = v / np .sqrt (v .dot (v ))
1350- for k in range (C ):
1351- angles [i , j , k ] = np .clip (v .dot (m [k ]), - 1 , 1 )
1352- return np .arccos (angles )
1339+ norms = np .sqrt (np .einsum ('ijk,ijk->ij' , data , data ))
1340+ dots = np .einsum ('ijk,mk->ijm' , data , m )
1341+ dots = np .clip (dots / norms [:, :, np .newaxis ], - 1 , 1 )
1342+ return np .arccos (dots )
13531343
13541344def msam (data , members ):
13551345 '''Modified SAM scores according to Oshigami, et al [1]. Endmembers are
0 commit comments