2017-09-06 19 views
2

다음에 대한 도움을 요청하고 싶습니다. 데이터 세트 131573 * 8이 있고 19247 * 8 개의 제로 행을 데이터 세트에 추가하고 싶습니다. 제로 행은 크기가 19247 * 1 인 행렬 YE에 저장 한 특정 위치에 추가해야합니다.matlab : 특정 행 번호에 0의 행을 추가하십시오.

예를 들면 다음과 같습니다. YE의 첫 번째 요소는 숫자 56입니다. 특정 행에 대해 행렬 데이터 집합에 0 행을 추가하고 싶습니다.

55 : 11 12 13 14 15 16 17 18

56 21 22 23 24 25 26 27 28

57 31 32 33 34 35 지금 세트 행 55-57 같은 것을 보인다 36 37 38

그것은 같아야

55 11 12 13 14 15 16 17 18

56 : 0 0 0 0 0 0 0 0

,174 51,515,

57 21 22 23 24 25 26 27 28

58 35 36 37 38

31 32 33 34 I 누군가 도와 수 희망 - I 아직 해결책을 찾지 못했다.

감사합니다. 특정 행 인덱스에서 dataset에 제로의 행을 삽입 하려면

답변

3

는 1 벡터화 방법은 다음 가 색인에을되지 않은 행을 작성하여 원하는 최종 크기의 제로의 매트릭스를 초기화하는 것입니다 dataset 내용 YE 벡터는 :

N = size(dataset, 1)+size(YE, 1); 
result = zeros(N, size(dataset, 2)); 
result(setdiff(1:N, YE), :) = dataset; 

그러나, 상기 해결책은 더 많은 메모리를 사용하는 새로운 result 행렬을 생성한다. 직접 dataset을 수정하고 (이것은 큰 행렬이기 때문에) 메모리에 저장하려면, 여기 대안이다 :

% Add the necessary number of rows of zeroes to the end: 
dataset = [dataset; zeros([size(YE, 1) size(dataset, 2)])]; 

% Create an index vector to reorder the rows: 
[~, index] = sort([setdiff(1:size(dataset, 1), YE).'; YE]); 

% Reorder the rows: 
dataset = dataset(index, :); 
+0

안녕 gnovice, 빠른 답장을 보내 주셔서 감사합니다! 해결책은 행을 0으로 대체하지만 행을 추가 행으로 추가해야합니다. 나는 그 문제를 더 잘 설명한다고 생각할 때 예제를 업데이트했다. – Marius

+1

@ 마리우스 : 답변이 업데이트되었습니다. – gnovice

+0

고마워, 아주 청초하고 유용한 해결책! – Marius

1

0 행을 설정하기 위해 인덱스 YE를 사용

dataset(YE, :) = zeros(1, size(dataset,2)); 

편집 : 0을 삽입하는 대신 해당 행을 0으로 설정하는 대신 위의 무시하십시오. 논리적 색인 YE를 행 번호로 변환 한 후 다음과 같이 작동하는 것이 좋습니다.

rowsYE = find(YE == 1); 
for idx = 1:length(rowsYE) 
    newData = dataset(1:rowsYE(idx)-1,:); % temp variable to hold data 
    newData(rowsYE(idx),:) = zeros(1,size(dataset,2)); % add a row of zeros 
    newData = [newData; dataset(rowsYE(idx):end,:)]; % add the rest of the data set 
    dataset = newData; % set the dataset = to temp 
    rowsYE = rowsYE + 1; % increment the rows index (since we added a new row) 
end 
+0

안녕하세요 조엘, 네가 무슨 뜻인지 안다. 이 작업은 데이터 세트의 행을 대체하지만 '새'행을 추가하려고합니다. 어쩌면 업데이트 된 예제가 문제를 더 명확하게 나타낼 수 있습니까? – Marius

+1

그래, 내가 그것을 작성한 후, 내 업데이 트를보고 깨달았다. –

+1

더 자세히 살펴보면 YE에 이미 행 번호가 포함 된 것처럼 보입니다.그렇다면 위의 해결 방법이 작동해야합니다. 행 YE = find (YE == 1); –