2017-10-12 7 views
4

조건부를 기반으로 도메인의 하위 집합을 만들고 싶습니다. 루프를 할 수는 있지만 인라인 if를 사용할 수 있는지 찾고 있습니다. Chapel에서 인라인 IF 배열 생성자를 수행하는 방법은 무엇입니까?

그냥 다시 만드는

var d = {1..8}; 
var e = [0.875, 0.625, 0.625, 1.0, 0.625, 0.875, 0.625, 0.625]; 
var p = 0.7; 

var vs = for i in d do i; 
writeln(" vs: ", vs); 

처럼 d 보이는 배열을하지만, 나는 de[d] < pvs에 압축을. 거기에 같은 접근이 있습니까?

vs = [i in d where e[i] < p] 
writeln(vs); // {2,3,5,7,8} 

답변

3

이 당신에게 원하는 결과를 제공해야합니다 : vs가 배열이 아닌 도메인입니다

var vs = for i in d do 
      if e[i] < p then i; 

하는 것으로합니다. 이 예는 이런 식으로 변합니다

var vs : domain(int) = for i in d do 
         if e[i] < p then i; 

:

var vs : domain(int); 
for i in d { 
    if e[i] < p then 
    vs.add(i); 
} 
+0

사랑스러운 조각, 벤 당신이 사용할 수있는 도메인을 원한다면, 당신은 연관 도메인을 사용합니다. ** 하나의 로케일 (로컬 호스트)에로드 된 약 10TB 데이터 세트 (64 비트 IEEE 값)에 대해 연관 도메인을 처리하기 위해 그러한 "내장 된 반복기"**의 실제 비용은 얼마가 될 것으로 예상됩니까? 8 노드 분산 처리 클러스터로 마이그레이션 할 수 있습니까? – user3666197

+1

'embedded iterator'가 연관 도메인에 인덱스를 추가하는 직렬 루프가된다는 것을 명확히 한 예제를 추가했습니다. 연관 도메인은 다른 언어의 '설정'과 매우 유사하며, 이는 색인을 추가하는 데 드는 비용에 대한 좋은 아이디어를 제공합니다. 이것은 병렬 안전을 끄면 더 빠를 수 있습니다 : var vs : domain (int, parSafe = false); – benharsh