驗證某個元素值後,是否有方法將元素插入到數組中?例如,採取matlab:元素後插入元素?
A = [0 0 1 1 0 1 0]
陣列中的每個1之後,我想插入另一個1得到
Anew = [0 0 1 1 1 1 0 1 1 0]
但是我想辦法對一般情況下編碼本(任意長度1行數組和可能以任何順序)。
驗證某個元素值後,是否有方法將元素插入到數組中?例如,採取matlab:元素後插入元素?
A = [0 0 1 1 0 1 0]
陣列中的每個1之後,我想插入另一個1得到
Anew = [0 0 1 1 1 1 0 1 1 0]
但是我想辦法對一般情況下編碼本(任意長度1行數組和可能以任何順序)。
此代碼是不是最優雅,但它會回答你的問題......
A=[0 0 1 1 0 1 0];
AA=[];
for ii=1:length(A);
AA=[AA A(ii)];
if A(ii)
AA=[AA 1];
end
end
我敢肯定會有也是量化的方式...
A = [0 0 1 1 0 1 1];
i = (A == 1); % Test for number you want insert after
t = cumsum(i);
idx = [1 (2:numel(A)) + t(1:end-1)];
newSize = numel(A) + sum(i);
N = ones(newSize,1)*5; % Make this number you want to insert
N(idx) = A
輸出:
N =
0 0 1 5 1 5 0 1 5 0
我所做的插入數字5和分裂的事情多行,所以很容易看到發生了什麼事情。
如果你想要做一個循環(這是我會怎麼做它在現實生活中,其中沒有人能看到我炫耀)
A = [0 0 1 1 0 1 0];
idx = (A == 1); % Test for number you want insert after
N = zeros(1, numel(A) + sum(idx));
j = 1;
for i = 1:numel(A)
N(j) = A(i);
if idx(i)
j = j+1;
N(j) = 5; % Test for number you want to insert after
end
j = j+1;
end
N
輸出:
N =
0 0 1 5 1 5 0 1 5 0
這應該做的伎倆:
>> A = [0 0 1 1 0 1 0]
>>
>> sumA = sum(A);
>> Anew = zeros(1, 2*sumA+sum(~A));
>> I = find(A) + (0:sumA-1);
>> Anew(I) = 1;
>> Anew(I+1) = 8.2;
Anew =
0 0 1 8.2 1 8.2 0 1 8.2 0
AA的唯一問題是每次迭代都會增加,這會使大矢量的速度變慢。如果您可以預先分配AA,則不存在任何問題,但是這樣的連接不起作用! – Zero
是的,這對大數組並不好,就像我已經說過的那樣,有一種矢量化的方式,並且你展示了一個。我也在考慮有關準確性的問題,但我不確定\沒有經歷過如何使用該功能來做到這一點...... – bla
沒有矢量化,但對讀者來說非常清楚。肯定是一個很好的答案,+1 –