2009-03-30 6 views
2

텍스트 파일에서 변수를로드하고 싶습니다.MATLAB의 텍스트 파일에서 값로드

예를 들어, 내 텍스트 파일은 varA, varBvarC입니다.

MATLAB에서 모든 변수가 2x2 행렬이되도록이 변수 값을 제공하고 싶습니다.

[ 1 2 3 4 5 6; 
    1 2 3 4 5 6] 

을 어떻게이게 가능 : 위의 정보 I는 다음과 같습니다 매트릭스를 얻을 것을 포함하는 텍스트 파일 그래서

?

좀 더 명확하게하려고 두 번째 예제를 추가했습니다. 내 TEXTFILE의 I를 가져올 때 내하는 .m 파일이

그래서
x1 = [1 1; 1 1] 
x2 = [2 2; 2 2] 
x3 = [3 3; 3 3] 

처럼 이러한 변수에 값을 제공 MATLAB에서이

x1 x2 x3 

처럼

내 텍스트 파일 text.txt이 보인다

a = (textfile) 
a = [1 1 2 2 3 3 ; 1 1 2 2 3 3] 

을 얻을 것입니다 나는 기본적으로 0123의 (아주 큰 문제에 genetic algorithm (GA)에 적응하려고(TSP) 유형). 문제는 내가 갖고있는 모든 변수가 매트릭스이고 크로스 오버, 피트니스 및 돌연변이 코드가 매우 복잡하다는 것입니다. 그리고 무작위 시작 인구를 만드는 데 문제가 있습니다.

변수가 한 번만 선택 될 수 있도록 256 개의 목록에서 30 개의 변수를 무작위로 선택하고 싶습니다. 그러나 각 변수는 변경할 수없는 2 * 2 행렬에 고유 한 값을가집니다.

내가 그들에게 대신 값의 변수를 만드는 모든 값 전에 x을 넣어 다음 randperm를 사용하고 싶습니다

...

+0

텍스트 파일에 변수 이름 만 저장합니까? 아니면 해당 변수에 할당 할 데이터도 저장합니까? – gnovice

+0

이것은 매우 혼란스럽고 복잡한 문제처럼 들립니다. 이 모든 것이 사용되는 큰 응용 프로그램에 대해 자세히 설명해 주시겠습니까? 나는 파일에서 변수 이름을 읽는 것보다는 .mt 파일을 사용하는 것보다 더 쉽게 문제를 처리 할 수있는 방법이 있다는 생각이 듭니다. – gnovice

답변

6

텍스트 파일의 데이터는이 (공백으로 구분 된 문자열)과 같은 경우

x1 x2 x3 ... 

사용 셀 배열로 문자열을 읽을 수 TEXTSCAN과 같이 :

fid = fopen('file.txt','r'); 
A = textscan(fid,'%s'); 
fclose(fid); 
A = A{:}; 

은 문자열을 셀 배열에 저장합니다 : { 'x1'; 'x2'; 'x3'; ...}. 이제, 이러한 문자열 중 하나에서 변수를 만들고 그 값을 할당하기 위해, 나는 ASSIGNIN 사용합니다 :

assignin('base',A{1},[1 2; 1 2]); 

이 기본 작업 영역에서 변수 1 개를 생성하고 그것에게 값을 할당 [1 2; 1 2]. 첫 번째 인수는 '기본'또는 '호출자'로 MATLAB 기본 작업 영역이나 호출자 함수의 작업 영역에 변수를 만들 수 있습니다. A의 각 문자열 이름에 대해이 작업을 반복하여 원하는 모든 값을 부여합니다.


대체 옵션은 :

이 내가 위에서 준 것과 다른 답변입니다. 위의 답변은 귀하가 귀하의 질문에서 제기 한 특정 문제를 다룹니다. 대답은 잠재적으로 문제에 대해 설명하는 방식대로 일을 피할 수있는 완전히 다른 옵션을 제공하며 희망 사항대로하면 더 쉽게 작업을 수행 할 수 있습니다.

문제를 이해하면 기본적으로 256 2 x 2 행렬을 가져오고, 무작위로 30 개를 선택하려고합니다. 이 2x2 행렬은 각각 자신의 변수 (x1 to x256)에 저장되어있는 것처럼 들립니다. 대신에, 나는 3-D 배열 중 하나로 하나의 변수에 모두 256 행렬을 저장하는 제안 :

xArray = zeros(2,2,256);  % Initialize all matrices as [0 0; 0 0] 
xArray(:,:,1) = [1 1; 2 2]; % This enters a value for the first matrix 

또는 셀 어레이 :

xArray = cell(1,256); % Initializes an empty array of cells 
xArray{1} = [1 1; 2 2]; % Enters a value for the first matrix 

먼저 모든 값을 초기화해야합니다. 당신은 무작위로 (30 개) 값을 선택하려면 다음, 당신은 다음 RANDPERM를 사용하여 3-D 배열의 세 번째 차원 또는 셀 어레이의 순서 중 하나의 순서를 무작위 수 있습니다

startOrder = 1:256;    % The default order of the matrices 
index = randperm(256);   % Randomly order the numbers 1 to 256 
xArray = xArray(:,:,index);  % For a 3-d array 
xArray = xArray(index);   % For a cell array 

이 그런 다음 첫 번째 사용 (대신에 당신이 예전처럼 개별 변수의) 귀하의 계산 xArray30 개 항목 :

x = xArray(:,:,1); % Puts the first matrix from the 3-D array in x 
x = xArray{1};  % Puts the first matrix from the cell array in x 

당신은 매트릭스의 새로운 무작위 배열을 생성 유지하는 RANDPERM의 사용을 계속 반복 할 수 있습니다. 당신에게 매트릭스가 있던 원래의 위치를 ​​알려줍니다

이제
startOrder = startOrder(index); 

항목 startOrder : 당신이 원래의 행렬이 사용중인 추적해야하는 경우, 당신은 당신이 xArray을 무작위 후이 줄을 추가해야 예를 들어, startOrder의 첫 번째 배열 항목이 40 인 경우 xArray의 첫 번째 위치에있는 행렬은 원래 xArray으로 초기화했을 때 입력 한 40 번째 행렬이었습니다.

희망이 도움이됩니다.

+0

고맙습니다. 고맙습니다. 그러나 나는 다른 방향으로하고 싶습니다. MATLAB의 모든 var에 2 × 2 매트릭스가 될 경우 내 텍스트 파일 VARA, VarB 같은 변수의 이름이 포함되어 있음을 의미 ... 그럼 내가 matlab에로로드 할 수 .. 예를 들어 텍스트 = X X = [0 1 ; 2 3] –

+0

수정 된 질문을 해결하기 위해 답변을 업데이트했습니다. – gnovice

+0

thx.그러나 나는 그들을 다시 이름을 지정하지 않고도 변수를 가져오고 싶습니다 (256 개의 변수가 순서대로 바뀌기 때문에) 기본적으로 유일한 문제는 textscan을 사용하는 동안 텍스트 배열을 멀리 떨어지게하는 것입니다. 그래서 x는 x가 아니고 'x'가 될 것입니다. –