Info

此问题已关闭。 请重新打开它进行编辑或回答。

How to re-size a vector with new element obtained from old ones?

2 次查看(过去 30 天)
I need to create a new vector which is re-sized type of a vector and it's elements are obtained from previews vector.
for example:
V1=[1 3 9 11]
V2=[3*(1)-2,3*(1)-1,3*(1)-0,3*(3)-2,3*(3)-1,3*(3)-0,3*(9)-2,3*(9)-1,3*(9)-0,3*(11)-2,3*(11)-1,3*(11)-0]
As you can see vector V2 is made of vector V1. Each element of vector V1 in a special mode.
How can I write a code that build up V2 from V1 and be fast at the same time because I should do it several times and time is important to me.
  2 个评论
Image Analyst
Image Analyst 2013-4-20
What's wrong with the way you're doing it? Just replace 1 by V(1), 3 by V(2), 9 by V(3), and 11 by V(4). Should be faster than a rocket powered, greased cheetah on steroids.
Ayob
Ayob 2013-5-2
It's ugly and bring about much difficulty to check it when you have a large program like mine.

回答(2 个)

per isakson
per isakson 2013-4-20
This is my best guess:
V1=[ 1, 3, 9, 11 ];
V2 = [ 3*V1(1)-2, 3*V1(1)-1, 3*V1(1)-0 ...
, 3*V1(2)-2, 3*V1(2)-1, 3*V1(2)-0 ...
, 3*V1(3)-2, 3*V1(3)-1, 3*V1(3)-0 ...
, 3*V1(4)-2, 3*V1(4)-1, 3*V1(4)-0 ];
>> V2
V2 =
1 2 3 7 8 9 25 26 27 31 32 33
I submit this to learn if I'm correct so far. Can V1 take any length?
  1 个评论
Zhang lu
Zhang lu 2013-5-2
Hi. what about
V1=[1 3 9 11];
a=[-2,-1,0];
V2=(repmat(3*V1',1,length(a))+repmat(a,length(V1),1))';
V2=V2(:)'

Jan
Jan 2013-5-2
编辑:Jan 2013-5-2
V1 = [1, 3, 9, 11];
a = [2, 1, 0];
V2 = reshape(bsxfun(@minus, V1, a(:)), 1, []);

此问题已关闭。

Community Treasure Hunt

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

Start Hunting!

Translated by