MATLAB Answers

3

insert element in vector

Majid Al-Sirafi さんによって質問されました 2012 年 9 月 24 日
最新アクティビティ Bernard
さんによって コメントされました 2019 年 7 月 29 日 14:40
Hi everyone
now, how can I insert element in vector .... for example
a=[1,2,4,5]
how can I embed 3 between 2 and 4 in above vector to be
a=[1,2,3,4,5]
thank you
majid

  10 件のコメント

Walter Roberson
2018 年 1 月 28 日
Sami Belhareth commented to Jan Simon:
This isn't a homework problem, they are looking for how to do a specific thing that may or may not be difficult to find in the documentation due to its specificity. Rude and unnecessary comment
Walter Roberson
2018 年 1 月 28 日
Sami Belhareth:
Back in September 2012 when Majid Al-Sirafi asked the question, Majid was a student asking student questions. At the time we responded, we knew that from previous interactions. There was a significant chance that it was indeed a homework related question. People were justified in asking whether it was homework or not, as we answer differently if it is: for homework we explain a lot more and teach the student how to think about questions to increase their understanding of the language and of programming in general, where-as for non-homework we are more likely to give short code under the assumption that the person already understands MATLAB and programming.
Jan
2018 年 1 月 29 日
@Walter: Thanks for your comment concerning homework. I think Sami's point is more my "rudeness".
The admins had cleaned up this thread in Nov-2017 already. I think it is strange, that the first activity from Sami's account is flagging a 3 year old comment in a 6 year old thread as being rude.

サインイン to comment.

6 件の回答

Wayne King
回答者: Wayne King
2012 年 9 月 24 日

a = [1,2,4,5];
b = [a(1:2) 3 a(3:end)];

  1 件のコメント

Khushi Bhatti 2018 年 10 月 11 日
great

サインイン to comment.


回答者: Jonathan Campelli 2015 年 3 月 12 日

Here is an application specific solution:
a=[1 2 4 5] %Your predefined vector.
a=sort([a 3]) %The "[a 3]" operation adds the element 3 to the end of vector "a", creating vector [1 2 4 5 3]. "Sort()" then alligns the new vector's elements in order from least to greatest.

  0 件のコメント

サインイン to comment.


Andrei Bobrov
回答者: Andrei Bobrov
2012 年 9 月 24 日
編集済み: Andrei Bobrov
2012 年 9 月 24 日

b = 3;
i1 = 3;
a = [a(1:i1-1),b,a(i1:end)];
or
a = [1 2 4 5];
i1 = 3;
b = 3000;
n = numel(b);
out = ones(size(a) + [0 n]);
out(i1 + (0:n-1)) = 0;
out(out > 0) = a;
out(out == 0) = b;

  1 件のコメント

Bernard
2019 年 7 月 29 日 14:40
a = [1 2 4 5];
b = 3;
idx = 3;
a = [a(1:length(a) < idx), b, a(1:length(a) >= idx)];
Simpler version of your second example, which I prefer because it works with idx == 1 or idx == length(a).

サインイン to comment.


Daniel Shub
回答者: Daniel Shub
2012 年 9 月 24 日

While I think this is a homework problem ...
Function handles and cat are your friends
insert = @(a, x, n)cat(2, x(1:n), a, x(n+1:end));
insert(3, [1,2,4,5], 2)
ans = 1 2 3 4 5

  0 件のコメント

サインイン to comment.


Walter Roberson
回答者: Walter Roberson
2018 年 3 月 7 日

There is no MATLAB operator for inserting into a MATLAB vector. Concatenating elements as described by Wayne King, Andrei Bobrov, and Daniel Shub is the natural MATLAB solution to this task.
The only exception to this is MATLAB String objects (R2016b and later), which have insertBefore and insertAfter operations defined for them that search the input strings to match a given text and insert at that point.
I have attached code to implement insertion after a given point into generalized vectors. Generalized vectors here refers to the fact that the vectors might have 3 or more dimensions, and that the code is not restricted to numeric or char.
There are some important differences between this code and the ones posted above:
  1. this code handles vectors of any dimension, not just row vectors
  2. the output is the same class as the initial vector even if different data types are involved. For example the other implementations if asked to insert 'a' after (double) 50 would produce '2a' because [50 'a'] automatically converts the double to char because of MATLAB rules about converting to the most restrictive data type when cat() is used. The code I attached will produce [50 97] instead -- but if you ask to insert (double) 50 before 'a' then you will get '2a' because the data type of the original vector is retained
  3. However, an empty original array will cause the output to be in the type of the new data so that you can always use [] to indicate empty array no matter what type you are appending
There are a number of design decisions explicitly documented in the code -- this seemingly simple operation is surprisingly complex.

  0 件のコメント

サインイン to comment.


回答者: Elena Fiermonte 2018 年 9 月 30 日
編集済み: Elena Fiermonte 2018 年 10 月 6 日

Hi everyone. I know it's a bit long, this should work with every kind of sorted vector. Feel free to refine it. Here it is:

 %code
A=[1 2 4 5]; % you must predefined a sorted vector.
B=zeros(1,length(A)+1);
L=length(A);
n=input('ins num: ')
for i=1:L
  for j=i:L
    if n>A(i)
    B(i+1)=n;
    B(i)=A(i);
    B(j+1)=A(j);
    elseif n==A(1)
    B(1:2)=A(1);
    B(i+1)=A(i);
    end
  end
end
B

  0 件のコメント

サインイン to comment.



Translated by