2014-05-22 2 views
2

C++에서 std::vector과 같이 크기를 지정하지 않고 MATLAB에서 배열을 선언 한 다음 요소를 배열에 "푸시"하고 싶습니다. 어떻게이 배열을 선언하고 그것을 밀어 넣을 수 있습니까?MATLAB에서 크기가없는 배열을 선언하는 방법은 무엇입니까?

+4

이것이 ** 아주 나쁜 관행 : 당신이 최대 크기를 알 수없는 경우

A = NaN(max_row, 1); it = 0; while condition it = it + 1; A(it) = value; end A = A(1:it); 

것은, 당신이 이런 식으로 뭔가를 시도 할 수 있습니다 :이 경우에이 더 나은 방법이 될 것입니다 메모리 할당 조건. 사전 할당을 고려하십시오. – Shai

답변

4

당신은 다음과 같이 빈 배열을 정의 할 수 있습니다

A = []; 

으로 "푸시"열 요소 :

A = [ A 42 ]; 

으로 "푸시"행 요소 :

A = [ A ; 42 ]; 
6

그 외에도 answer of Paul R은 정확하지만 은 매우 불량한 사례입니다 to 미리 할당하지 않고 배열을 Matlab에서 자라게하십시오. std::vector에도 메모리를 다시 할당하지 않으려면 reserve() 메모리 옵션이 있습니다.

memeory를 미리 할당 한 다음 실제로 필요한 크기에 맞게 크기를 조정하는 것이 좋습니다.

사전 할당 here에 대한 자세한 내용을 볼 수 있습니다.

4

Shai pointed out으로 요소를 벡터에 푸시하는 것은 MATLAB에서 좋은 방법이 아닙니다. 네가이 일을 반복하고 있다고 가정하고있어. **에서

stack_size = 100; 
A = NaN(stack_size,1); 
it = 0; 

while some_condition 
    it = it + 1; 
    if mod(it, stack_size) == 0 
     A = [A; NaN(stack_size,1)]; 
    end 
    A(it) = value; 
end 
A = A(1:it); 
관련 문제