Assume, I have the following vector Zs (9x1):
0
0
1
0
1
0
0
1
0
I want to create sub-vectors such that each of them will include three numbers in the Zs, consecutively.
For example,
Zs1 = [0; 0; 1]
Zs2 = [0; 1; 0]
Zs3 = [0; 1; 0]
Thanks,

댓글 수: 6

James Tursa
James Tursa 2016년 7월 6일
How large is your real problem?
Taner Cokyasar
Taner Cokyasar 2016년 7월 6일
편집: Taner Cokyasar 2016년 7월 6일
My real Zs is 95x1 and I want to create an even larger one. This is just a conditional situation to decide for creation of a constraint (I am trying to construct an MILP model by intlinprog).
But, in the 95x1 Zs, I need to separate the vector into 95/5 sub-vectors. Then, I will multiply those column vectors by a row vector and compare all of them with each other.
James Tursa
James Tursa 2016년 7월 6일
How are you doing the multiply? Inner product? If so, then you really really do not want to do what you are proposing. Instead you should be reshaping your original vector into a matrix and then doing a simple matrix multiply. Please post a small example using your 9x1 above to show the exact "multiply ... by a row vector" calculation you would like to do and the expected result. Then we can point you towards a better way of doing it.
Taner Cokyasar
Taner Cokyasar 2016년 7월 6일
편집: Taner Cokyasar 2016년 7월 6일
Assume, m = 3
k = 1:m; %k is a row vector and every Zs is a column vector.
k*Zs(1) = scalar
k*Zs(2) = scalar2
k*Zs(3) = scalar3
If scalar>scalar2, do something... Otherwise, don't do anything.
If scalar>scalar3, do something... Otherwise, don't do anything.
If scalar2>scalar3, do something... Otherwise, don't do anything.
This is basically, what I am trying to do. "do something" means to create a constraint to be used in intlinprog. Intlinprog uses A, Aeq, b, beq... matrices to solve the problem. I will need to compare "scalar" values and either put a number into "matrix b" (which is a required matrix for intlinprog) or not.
I am planning to calculate "scalar" values first. Then, maybe I can create a for loop to compare them. According to the result of whichever scalar is SMALLER, its corresponding f value ( f values are in the data) will be subtracted from the LARGER scalar's f value.
Stephen23
Stephen23 2016년 7월 7일
@Taner Cokyasar: Don't create lots of variables like that! You will only make your code much slower, more complicated, and buggy. Oh, it it will also be much harder to debug! Read thsi carefully to know why:
The best solution: Keep your data in one variable, and learn to use indices effectively.

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

 채택된 답변

James Tursa
James Tursa 2016년 7월 6일
편집: James Tursa 2016년 7월 7일

0 개 추천

Don't do that. Use cell arrays or some other method instead. E.g., see this link:
EDIT 7/6/2016:
OK, based on what you have recently posted, try this:
k = your row vector
Zs = your large column vector
n = numel(k);
scalars = k * reshape(Zs,n,[]);
The elements of scalars will be the values you want.

추가 답변 (0개)

카테고리

태그

질문:

2016년 7월 6일

댓글:

2016년 7월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by