이 있 foreach MATLAB?그렇다면,그것은 어떻게 행동하는 경우 기초 데이터를 변경해야 합니까?

StackOverflow https://stackoverflow.com/questions/408080

  •  03-07-2019
  •  | 
  •  

문제

이 있 foreach 구조에서는 MATLAB?그렇다면,무엇이 일어나면 기초 데이터 변경(예:는 경우 객체를 추가하는 set)?

도움이 되었습니까?

해결책

Matlab 's 을 위한 루프는 본질적으로 정적입니다. 반복간에 루프 변수를 수정할 수는 없습니다. for (초기화; 조건; 증분) 다른 언어로 된 루프 구조. 이것은 다음 코드가 항상 B의 값에 관계없이 항상 1, 2, 3, 4, 5 인쇄한다는 것을 의미합니다.

A = 1:5;

for i = A
    A = B;
    disp(i);
end

반복 중에 데이터 구조의 변경에 응답 할 수 있으려면 동안 고리 더 적절할 수 있습니다 --- 모든 반복 할 때 루프 조건을 테스트하고 원하는대로 루프 변수의 값을 설정할 수 있습니다.

n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end
disp(['n! = ' num2str(f)])

btw, the 각각 고리 자바에서 (및 다른 언어)는 반복 중에 데이터 구조가 수정 될 때 지정되지 않은 동작을 생성합니다. 데이터 구조를 수정 해야하는 경우 적절한 반복자 반복중인 컬렉션에서 요소를 추가하고 제거 할 수있는 인스턴스. 좋은 소식은 Matlab이 Java 객체를 지원하므로 다음과 같은 일을 할 수 있다는 것입니다.

A = java.util.ArrayList();
A.add(1);
A.add(2);
A.add(3);
A.add(4);
A.add(5);

itr = A.listIterator();

while itr.hasNext()

    k = itr.next();
    disp(k);

    % modify data structure while iterating
    itr.remove();
    itr.add(k);

end

다른 팁

Zach 이 올바른지에 대한 직접적인 질문에 대답.

흥미로운 쪽을 참고가는 다음과 같은 두 개의 루프가 실행되지 않은 동일합니다:

for i=1:10000
  % do something
end
for i=[1:10000]
  % do something
end

첫 번째 루프의 변수를 만듭니다 i 는 스칼라와 그것은 반복하는것처럼 C 에 대한 반복입니다.참고 수정하는 경우 i 루프에서 신체,수정한 값은 무시됩니다으로,Zach 말한다.두 번째 경우에는 Matlab 를 만듭니다 10k-요소의 배열을,그것은 산책의 모든 요소를 배열입니다.

이것이 무엇을 의미하는

for i=1:inf
  % do something
end

작동 하지만,

for i=[1:inf]
  % do something
end

하지 않기 때문에(이 필요한 것이 무한 메모리 할당).보 로렌의 블로그 자세한 내용은.

또한 참고할 수있는 반복을 통해 세포 배열입니다.

Matlab ~을 위한 루프는 기본적으로 기본적으로 큰 유연성을 허용합니다 기능. 여기에서 몇 가지 예 :

1) 시작, 증분 및 엔드 인덱스를 정의하십시오

for test = 1:3:9
   test
end

2) 벡터에 대한 루프

for test = [1, 3, 4]
   test
end

3) 문자열 위의 루프

for test = 'hello'
   test
end

4) 1 차원 셀 어레이를 통한 루프

for test = {'hello', 42, datestr(now) ,1:3}
   test
end

5) 2 차원 셀 어레이에 대한 루프

for test = {'hello',42,datestr(now) ; 'world',43,datestr(now+1)}
   test(1)   
   test(2)
   disp('---')
end

6) 구조 배열의 필드 이름을 사용하십시오

s.a = 1:3 ; s.b = 10  ; 
for test = fieldnames(s)'
   s.(cell2mat(test))
end

셀 어레이를 루프하고 셀의 각 요소에 무언가를 적용하려는 경우 확인하십시오. cellfun. 또한 있습니다 arrayfun, bsxfun, 그리고 structfun 프로그램을 단순화 할 수 있습니다.

오! 깔끔한 질문.

Matlab 's for loop은 입력으로 행렬을 가져 와서 열을 반복합니다. MATLAB은 또한 값으로 실질적으로 모든 것을 처리하므로 (패스 바로 회의 없음) For-Loop의 입력에 대한 스냅 샷이 필요하므로 불변이 될 것으로 기대합니다.

다음은 다음과 같이 설명하는 데 도움이 될 수있는 예입니다.

>> A = zeros(4); A(:) = 1:16

A =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16

>> i = 1; for col = A; disp(col'); A(:,i) = i; i = i + 1; end;
     1     2     3     4

     5     6     7     8

     9    10    11    12

    13    14    15    16

>> A

A =

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

문자열의 셀 어레이를 반복 할 때 루프 변수 ( f)는 단일 요소 셀 어레이가됩니다. 글을 써야합니다 f{1} 어디에서나 지루해지고 루프 변수를 수정하면 깨끗한 해결 방법이 있습니다.

% This example transposes each field of a struct.
s.a = 1:3;
s.b = zeros(2,3);
s % a: [1 2 3]; b: [2x3 double]
for f = fieldnames(s)'
    s.(f{1}) = s.(f{1})';
end
s % a: [3x1 double]; b: [3x2 double]

% Redefining f simplifies the indexing.
for f = fieldnames(s)'
    f = f{1};
    s.(f) = s.(f)';
end
s % back to a: [1 2 3]; b: [2x3 double]

이 있다고 가정해 봅시 데이터 배열:

n = [1    2   3   4   6   12  18  51  69  81  ]

할 수 있습니다 다음'foreach'는 이를 다음과 같이 설명합니다:

for i = n, i, end

이코에 있는 모든 요소 n(지만 교체하면 나는 더 많은 흥미로운 것들은 또한 가능한 코스!)

나는 이것이 OP가 정말로 원하는 것이라고 생각합니다.

array = -1:0.1:10

for i=1:numel(array)
    disp(array(i))
end

오늘 (2 월 27 일), MATLAB 파일 교환에 새로운 for-each 도구 상자가 있습니다. 그것은 개념을 달성합니다 foreach. foreach Matlab 언어의 일부는 아니지만이 도구 상자를 사용하면 무엇을 모방 할 수 있습니다. foreach 할것이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top