insert element in vector

조회 수: 458 (최근 30일)
Majid Al-Sirafi
Majid Al-Sirafi 2012년 9월 24일
댓글: Julián 2024년 8월 22일
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
  댓글 수: 11
Jan
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.
Luck Haviland
Luck Haviland 2022년 12월 8일
Not sure if I am breaking the matlab forums code of conduct by not answering OP's question but I agree with @Jonathan Campelli's way of looking at answering peoples questions. Even if the question is a homework question for one person, it can be a non homework question for another person. If the question is never answered, there will be no learning which defeats the purpose of a community forum.

댓글을 달려면 로그인하십시오.

채택된 답변

Wayne King
Wayne King 2012년 9월 24일
a = [1,2,4,5];
b = [a(1:2) 3 a(3:end)];
  댓글 수: 2
Khushi Bhatti
Khushi Bhatti 2018년 10월 11일
great
Julián
Julián 2024년 8월 22일
explain please

댓글을 달려면 로그인하십시오.

추가 답변 (6개)

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

Jonathan Campelli
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.
  댓글 수: 4
Dana Massie
Dana Massie 2022년 6월 21일
love it. so simple. Thanks.
Jack
Jack 2024년 2월 7일
Thanks man!

댓글을 달려면 로그인하십시오.


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
Bernard 2019년 7월 29일
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).

댓글을 달려면 로그인하십시오.


JMP Phillips
JMP Phillips 2021년 4월 20일
편집: DGM 2023년 3월 4일
If you are reading this in 2021 now in MATLAB you can just do something like this (no for loops, no 'cat'). It can also work with inserting more than 1 element into a vector.
y = zeros(1,length(x)+length(b)); %initialise a new vector of the appropriate size
y(a) = b; %insert the values in 'b' at the locations in 'a'
y(y==0) = x; %insert the original values in x into the new vector at their new positions.
where
  • x is the existing vector to insert values into
  • a is vector of indices where to put new values
  • b is vector of new values
NOTE: because we use 0 we cannot insert a value of 0, this works for non-zero values only.
Example with inserting multiple values at specified locations into an array:
x = [1,2,3,4,5]
a = [3,5,1,4]
b = [5, nan, 3, 717]
Result:
y = 3 1 5 717 NaN 2 3 4 5
and the original question with inserting 1 element would be solved by
x = [1,2,4,5]
a = 3
b = 3
Result:
y = 1 2 3 4 5
  댓글 수: 1
Pol Cardona Rubio
Pol Cardona Rubio 2024년 4월 15일
편집: Pol Cardona Rubio 2024년 4월 15일
If instead of creating it with a zero value you create it with NaN and then index based on isnan() it can be used with any valued vector as in:
y = repmat(NaN,length(x)+length(b)); %initialise a new vector of the appropriate size
y(a) = b; %insert the values in 'b' at the locations in 'a'
y(isnan(y)) = x; %insert the original values in x into the new vector at their new positions.

댓글을 달려면 로그인하십시오.


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.
  댓글 수: 1
Manuel Infante Francés
Manuel Infante Francés 2023년 4월 5일
편집: Manuel Infante Francés 2023년 4월 5일
Good morning, I have the following problem, in the thread of this forum:
I am trying to add an element to a column vector (B1 of m rows) that is the output of a Matlab Function block. The output vector (B) is desired to have m+1 rows. When adding the element (with value = x), the resulting output (B) is a vector of m+1 rows, with the particularity that all the rows will acquire the value (x) of the added element. Add the value you add and use the method you use (cat function, indexing etc.), the resulting vector is effectively a vector of m+1 elements, but with the same value (x) for all its elements.
Example:
function B=fcn(A,Ts)
B1 =diff(A)/Ts;
B =[1;B1];
In the example below, 1 is the value I want to index into B1 to get B. A has 501 elements and I want the output of function (B) to also have 501 elements (the value of the first row element must be 1 and from row 2 to the last one -both included- it should be the vector B1). However, all the elements of B are equal to 1. Ts comes from a constant block with scalar value (0.02).
Thank you.

댓글을 달려면 로그인하십시오.


Elena Fiermonte
Elena Fiermonte 2018년 9월 30일
편집: DGM 2023년 3월 4일
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

카테고리

Help CenterFile Exchange에서 Get Started with MuPAD에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by