숫자 및 텍스트 데이터 유형이 혼합 된 거대한 CSV 파일이 있습니다. 이걸 Matlab의 단일 행렬로 읽고 싶습니다. 내 문제를 설명하기 위해 여기에 간단한 예제를 사용하겠습니다.MATLAB으로 텍스트 필드를 읽고 단일 행렬을 만드는 방법
A=fopen('filename.csv');
B=textscan(A,'%d %d', 'delimiter',',');
C=cell2mat(B);
는 처음 두 줄은 잘 작동하지만, 문제는이 texscan 생성하지 않는다는 것입니다 : 내가 사용 매트랩에이 글을 읽을하려고
1,foo
2,bar
:의 나는이 CSV 파일이 있다고 가정 해 봅시다 2x2 매트릭스; 대신 각 값이 배열 인 1x2 행렬을 만듭니다. 그래서 마지막 줄을 사용하여 배열을 하나의 큰 행렬로 결합하려고 시도하지만 배열에 다른 데이터 유형이 있기 때문에 오류가 발생합니다.
이 문제를 해결할 수있는 방법이 있습니까? 또는 배열을 결합하는 더 좋은 방법은?
OLS 회귀 분석에서 종속 변수 역할을하는 행렬을 만들기 위해 이들을 결합했습니다.더미 변수 (예 : "true"또는 "false"라고하는 필드가 1 또는 0으로 변환 됨)로 변환되어야하는 여러 텍스트 필드가 있습니다. 필자는 텍스트를 매트릭스에 집어 넣은 다음 필요에 따라 필드를 변환하려고했습니다. 그러나 당신의 제안을 기반으로, 여전히 배열에있는 동안 물건을 변환 한 다음 결합하는 것이 더 좋은가? 모든 것이 변환 된 후에, cell2mat를 결합하는 것이 바람직합니까? 감사합니다. Doug! – Jack7890
당신은 구조에서 이러한 유지 할 수 있습니다 : data.num = NUM data.txt로 = 이 txt를이 하나 개의 용기에 보관하고, 좀 더 직관적 인 이름으로 그들에게 참조 할 수있게된다. 그것들을 하나의 셀 배열에 넣으면 구문을 조합하고 결합하는 것 외에 다른 이점을 사용하지 않고 구문을 읽고 조작 할 수 있습니다. 나는 구조와 함께 갈 것이다. – MatlabDoug
@ Jack7890 : * 실제로 * 개별 배열을 행렬에 결합하려는 경우 먼저 모든 배열 내용을 동일한 데이터 유형으로 변환해야합니다. 예를 들어, 배열 [ 'foo'; 'bar']가 B {2}에 저장되면 [3; 4]. 배열을 가로로 연결하여 [1 3; 2 4], 다음을 수행하십시오. C = [B {:}]; 배열을 수직으로 연결하여 [1; 2; 삼; 4] 대신 다음과 같이하십시오 : C = vertcat (B {:}); – gnovice