基本上,可以說我有一個隨機數字列表:x = {3,5,6,7,8,11,13,14,16,22,25}
。
我想循環這些數字,但我希望我的索引實際上是每個數字。所以,如果我做的:你可以在Matlab中的索引列表/單元格中編號嗎?
for i = x{1} : x{length(x)}
disp(i);
我希望我的i
是3
,然後5
,然後6
,7
,8
,11
,13
等...
基本上我想在未來數之差和當前的數字,這是我的一步。
基本上,可以說我有一個隨機數字列表:x = {3,5,6,7,8,11,13,14,16,22,25}
。
我想循環這些數字,但我希望我的索引實際上是每個數字。所以,如果我做的:你可以在Matlab中的索引列表/單元格中編號嗎?
for i = x{1} : x{length(x)}
disp(i);
我希望我的i
是3
,然後5
,然後6
,7
,8
,11
,13
等...
基本上我想在未來數之差和當前的數字,這是我的一步。
我不確定你在找什麼在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
對於矢量x
,如果你想創建一個新的載體result
,其中result
的ith
元素是x
的x(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
這已被覆蓋。現在我要離開我的答案,以防萬一你想在開始時使用矢量工具。
-1:'x(x)'沒有意義。 –
除了它回答他的問題。請閱讀我的更新,這應該澄清'x(x)'在做什麼。 – Engineero
我讀過你的更新,從我從問題中推斷出的內容,與OP想要做的事情還有很大差距。你在這裏做的是用'x'的值作爲索引,它缺乏任何意義。即使它有意義,在這個尷尬的例子中'x'是一個單元陣列,所以這會觸發語法錯誤。看看我發佈的重複問題和Mohsen的答案的鏈接。 –
由於您的列表位於小區中您可以使用
for idx = cell2mat(x)
disp(idx)
end
事實上,有可能是重複的。然而,我會補充說,爲了安全起見,最好使用顯式索引而不是依賴'for each'行爲,這需要數據的特定方向。通常這個要求會很好,但是在最近的版本中(例如:union,setdiff等)某些內置matlab函數產生的方向已經改變,並且可能破壞現有的代碼。 – Alan
@Alan您可以使用'colon'運算符(':')或使用'reshape'強制列方向。 –
@EitanT是的,我的觀點是,您應該使用您建議的方法強制進行定向,或者使定向不相關,因爲您不能相信定位可靠地達到您的預期。 – Alan