4 열은 있지만 여러 행의 2 차원 배열을 포함하는 CSV 파일이 있습니다. 예 :Matlab, csv 파일에서 복수의 2 차원 배열을 읽습니다.
2, 354, 23, 101
3, 1023, 43, 454
1, 5463, 45, 7657
4, 543, 543, 654
3, 56, 7654, 344
...
나는 그러나 csvread, dlmread 및 textscan 모두가 빈 줄을 무시하고, 나는 데이터의 각 블록에 대한 작업을 실행할 수있는 데이터는 가져올 수 있어야합니다.
어디서나 솔루션을 찾을 수없는 것 같은데 어떻게 할 수 있습니까?
는 PS :
그것은 형식의 파일이 위의 사실은 하나의 데이터 블록 만 (포함 된 많은 파일의 연결 있음을 주목할 필요가있을 수 있습니다 내가 원하는하지 않습니다는 수천 읽을 필요합니다 파일을 매번) 블록 사이의 빈 줄을 다른 구분 기호/표식으로 변경할 수 있습니다. 이것은 파이썬 스크립트로 끝난다.
편집 : 내 솔루션 -에/기반 내가 빠른 textscan으로 csvread을 대체
아래 petrichor에 의해 영감을 된. 그런 다음 빈 라인을 대신 나노 라인으로 교체하면 (파이썬 스크립트 수정) 두 번째 필요성을 제거 할 수 있다고 생각했습니다. textscan 느린 포인트. 내 코드는 다음과 같습니다 0.28s (단지의 103,000 라인의 파일)으로 평가 어느
filename = 'data.csv';
fid = fopen(filename);
allData = cell2mat(textscan(fid,'%f %f %f %f','delimiter',','));
fclose(fid);
nanLines = find(isnan(allData(:,1)))';
iEnd = (nanLines - (1:length(nanLines)));
iStart = [1 (nanLines(1:end-1) - (0:length(nanLines)-2))];
nRows = iEnd - iStart + 1;
allData(nanLines,:)=[];
data = mat2cell(allData, nRows);
. 실제로 초기 문제를 가장 잘 해결해 주므로 Petrichor의 솔루션을 받아 들였습니다. 귀하의 데이터에 대해 다음 제공
나는 방법 중 하나가 NaN NaN의 NaN의 NaN이 같은 뭔가 빈 줄을 대체하는 다음 csvread를 사용하여 데이터를로드 한 후 것이라고 가정 또는 당신이 데이터를 통해 루프와 MATLAB에서 블록을 아주 쉽게 추출 할 수있는 비슷한. – Dan
나는 전체적인 프로세스에 더 많은 시간을 추가하기 때문에 가져온 후에 데이터를 되돌릴 필요가 없다고 생각했다. 또 다른 메모에서 필자는 textscan이 가져 오는 가장 빠른 방법이라는 것을 지금까지 발견했습니다. –
구분 기호를 전혀 사용하지 않고 새로운 블록이 시작될 때의 행 인덱스 인 두 번째 파일을 만든 다음이 파일을 사용하여 각각에 대해 별도의 행렬을 작성하지 않고 작업 할 행 범위를 정의 하시겠습니까? – Dan