add rows between two indexes in an array
8 次查看(过去 30 天)
显示 更早的评论
I have an array where the cell values ascend from 1 to 300. Some values occur more often than others.
For values which come up less than 20 times, I would like to add enough of them to get to 20.
Example:
array1 = [1; 1; 1; 2; 2; 2; 2; 2; 3; 3; 3;] % snipit of the array
given that there are 20 of the 1s and 20 of the 3s I am missing 15 of the 2s (I only have 5 of the 2s in the array currently)
In another array I have the index of the values for which there are not 20, as well as the number of indexes missing to get to 20.
array2 = [401,15 ; 516,4 ; 1117, 11]
Since adding 15 indexes to 401 will shift the next index for which I add values by 15, the following could tackle that problem: an array which adds the number of shifts consecutively
for j=2:length(array2)
array3(j,1) = array2(i,2)+array2(i-1,2);
end
%produces following array:
array3=[0; 19; 30]
so now, the question is how do I put the following into actually working code:
for i=1:length(array2)
array1(array2(i+array3(i),1)) add array2(i,2)
end
any help would be very much appreciated!!
6 个评论
hosein Javan
2020-8-12
that means array1 is empty vector, are you sure you have run the program and array1 is created in a correct way?
回答(1 个)
Walter Roberson
2020-8-12
Since adding 15 indexes to 401 will shift the next index for which I add values by 15
There is a fairly simple way to get around that problem:
Work backwards. Start from the end and go back towards the beginning.
That way, every index that you have not yet worked on is still valid, because it refers relative to the beginning of the array and you have not changed from the beginning of the array to your current point.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multidimensional Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!