행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?안녕. 값의 큰 벡터(예: 1차원 행렬)가 있는데 여기서 값의 하위 집합을 제거하고 싶습니다. 여기서 하위 집합에는 원래 벡터의 비순차적 값 집합이 포함되어 있습니다. 예를 들어:
큰벡터 = [1,2,3,4,5]
부분 집합 = [2,5]
원하는 결과 = [1,3,4]
JSL에서 이 작업을 수행할 수 있는 간단한 명령 또는 명령 집합이 있는지 궁금합니다. For 루프를 사용하여 이 작업을 수행할 수 있지만 더 우아하고 빠른 방법이 있는지 궁금하십니까?
Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?감사합니다 제프! 1000x는 꽤 좋습니다. 행을 삭제하기 위해 행에 빈 행렬을 할당할 수 있다는 사실을 실제로 알지 못했습니다.
나는 이미 문서를 변경해야 하거나 느린 방법을 가속화해야 한다고 기술 지원에 제안했습니다.
Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?DataM = J( 1067000, 8, Random Normal() ) || J( 1067000, 1, Random Binomial( 1, 0.07 ) );
DataM1 = DataM;
DataM2 = DataM;
Close( dt, nosave );
start = Tick Seconds();
foo = As Table( DataM, <<INVISIBLE></INVISIBLE>
결과:
data_table_method = 1.0333333333333;
matrix_method1 = 49.166666666667;
matrix_method2 = 0.066666666666606;
@Craige_Hales ' 방법(matrix_method2)이 가장 빠릅니다.
데이터 테이블을 사용하는 것이 빠를지 궁금했고, matrix_method2보다 15배 느리지만 이 적당한 크기의 문제에 대해서는 여전히 꽤 빠릅니다. 그런 다음 데이터가 이미 데이터 테이블에 있고(데이터 테이블과의 변환을 피함) 훨씬 더 빨라지는 경우 시간이 얼마나 걸리는지 궁금했습니다.
foo = As Table( DataM, <<INVISIBLE></INVISIBLE>
결과:
data_table_method2 = 0.316666666666606
Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?예. !=를 사용하여 반대 위치를 얻은 다음
DataM = DataM[rr,0];
100배 빨라야 합니다.
나는 당신이 그것을하고있는 방식이 삭제 된 각 행에 대한 배열을 다시 생성한다고 생각합니다.Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?@Craige_Hales ,
큰 행렬에서 행을 효율적으로 제거하는 방법에 대한 생각이 있습니까?
데이터 매트릭스가 > 1백만 행 x 9 열(지금 바로 앞의 예에서 1,604,736 x 9)인 상황이 있습니다.
일부 행, 실제로 > 78k 행을 제거해야 합니다. 여기 내가 지금 하고 있는 일이 있어
rr = Loc(DataM[0,4] == 1);
DataM[rr,0] = [];
그래서 저는 4번째 열이 1인 경우를 찾고 있고 모든 행을 없애고 싶습니다.
Loc() 라인은 매우 빠르지만( < 0.05초 ) 다음 라인은 매우 느립니다( 83초 )!
내가 읽은 JMP 문서를 사용하고 있습니다.
행과 열을 삭제하려면 해당 행이나 열에 빈 행렬을 할당하면 됩니다.
A[k, 0] = []; // k번째 행 삭제
A[0, k] = []; // k번째 컬럼 삭제
내 데이터 매트릭스가 크기 때문에 막힌 것일 수 있습니다.
벡터가 아닌 행렬을 다루기 때문에 연관 배열 트릭을 사용할 수 있는지 확실하지 않습니다.
톰
Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?감사합니다 크레이지.
첫 번째 가정은 정확했습니다. 1,2,3,4,5를 포함하는 벡터에서 리터럴 값 2와 5를 제거하고 싶습니다. 명확히 하는 데 도움이 되는 또 다른 예는 largevect에서 이 하위 집합 벡터를 제거하고 싶습니다.
큰벡터 = [12, 189, 3, 78, -2]
부분 집합 = [189, -2]
원하는 결과 = [12, 3, 78]
나는 AA를 많이 사용하지 않았지만 해결책으로 이것을 좋아합니다. 도와 주셔서 감사합니다!
Re: 행렬/벡터에서 값 집합을 제거하는 방법은 무엇입니까?이 질문에 잘 대답하려면 더 많은 정보가 필요할 것입니다.
설정 작업을 수행하는 경우 다음을 참조하십시오. JSL 집합 작업 연관 배열로 이를 수행하는 방법은 다음과 같습니다.
// this would be a little more natural using lists
// or associative arrays, but it is easy to make an
// associative array set from a matrix:
largevect = [20, 30, 40, 50, 10];
subset = [20, 50];
aaBigSet = Associative Array( largevect );
aaSmallSet = Associative Array( subset );
// remove the small set from the big set
aaBigSet << Remove( aaSmallSet );
// getkeys returns a list, make a matrix
result = Matrix( aaBigSet << getkeys );
// the original order is lost, but the set is correct
show(result); // [10, 30, 40];
귀하의 예에서 불분명한 경우 부분 집합 값 목록 또는 값에 대한 인덱스입니다. 인덱스이고 제거할 세트 대신 유지할 인덱스 세트를 생성할 수 있는 경우 다음과 같이 간단합니다.
largevect = [20, 30, 40, 50, 10];
keepers = [1,3,4];
desired result = largevect[ keepers ];
show(desiredResult); // [20, 40, 50];