2013-07-01 78 views
-1

基本上,可以說我有一個隨機數字列表:x = {3,5,6,7,8,11,13,14,16,22,25}
我想循環這些數字,但我希望我的索引實際上是每個數字。所以,如果我做的:你可以在Matlab中的索引列表/單元格中編號嗎?

for i = x{1} : x{length(x)} 

    disp(i); 

我希望我的i3,然後5,然後6781113等...
基本上我想在未來數之差和當前的數字,這是我的一步。

+0

事實上,有可能是重複的。然而,我會補充說,爲了安全起見,最好使用顯式索引而不是依賴'for each'行爲,這需要數據的特定方向。通常這個要求會很好,但是在最近的版本中(例如:union,setdiff等)某些內置matlab函數產生的方向已經改變,並且可能破壞現有的代碼。 – Alan

+0

@Alan您可以使用'colon'運算符(':')或使用'reshape'強制列方向。 –

+0

@EitanT是的,我的觀點是,您應該使用您建議的方法強制進行定向,或者使定向不相關,因爲您不能相信定位可靠地達到您的預期。 – Alan

回答

0

我不確定你在找什麼在matlab中存在。我會做到這一點:

for j = 1:x{size(x,2)} 
    disp(x{j}); % or any other processing, 
    % % you can also set i=x{j} and do what you wanted to do with i. 
end 
-1

對於矢量x,如果你想創建一個新的載體result,其中resultith元素是xx(i)th元素,那麼你可以使用:

result = x(x); 

這相當於:

result = zeros(length(x)); 
for i = 1:numel(x) 
    index = x(i); 
    result(i) = x(index); 
end 

但它應該是一個快得多。這對於向量化代碼並使其運行速度更快可能很有用。如果通過元素需要環路但是,(最好是避免環路MATLAB中儘可能),你可以使用:

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

這是一個有點令人費解,但工程。

需要注意的是:您必須確保x的任何元素都不超過x的尺寸,否則您將收到錯誤消息。此外,x的每個元素都必須是整數。

編輯:上述方法是爲一個向量,這是我最初如何解釋你的問題。對於單元陣列來說,它看起來像你的選項有限一些。我一直無法找到比使用這種方法更快的方式:

index = zeros(numel(x),1); 
for i = 1:numel(x) 
    index(i) = x{i}; 
end 

這已被覆蓋。現在我要離開我的答案,以防萬一你想在開始時使用矢量工具。

+0

-1:'x(x)'沒有意義。 –

+0

除了它回答他的問題。請閱讀我的更新,這應該澄清'x(x)'在做什麼。 – Engineero

+0

我讀過你的更新,從我從問題中推斷出的內容,與OP想要做的事情還有很大差距。你在這裏做的是用'x'的值作爲索引,它缺乏任何意義。即使它有意義,在這個尷尬的例子中'x'是一個單元陣列,所以這會觸發語法錯誤。看看我發佈的重複問題和Mohsen的答案的鏈接。 –

2

由於您的列表位於小區中您可以使用

for idx = cell2mat(x) 
    disp(idx) 
end 
相關問題