NCHOOSEK - What am I doing wrong?

V = nchoosek({CRY,DXY,GOLDS,USCRWTIC,USGG2YR,USGG10YR},4);
for i= 1:15;
A{i} = V(i,:);
end;
Basically, I would need to create A1 to A15 containing the 'i' line of the matrix V. For example:
V = [1 2 3 4 ; 5 6 7 8 ; 9 0 1 2]
I would need
A1 = [1 2 3 4]
A2 = [5 6 7 8]
A3 = [9 0 1 2]
I've been searching for this for all day >.<

 채택된 답변

Image Analyst
Image Analyst 2013년 5월 25일

1 개 추천

Sure, if you want to regress, just run this demo (where I made up some arbitrary values):
CRY = rand(1, 20);
DXY = rand(1, 20);
GOLDS = rand(1, 20);
USCRWTIC = rand(1, 20);
USGG2YR = rand(1, 20);
USGG10YR = rand(1, 20);
V = nchoosek({CRY,DXY,GOLDS,USCRWTIC,USGG2YR,USGG10YR},4)
for i= 1:15
A{i} = V(i,:);
end
y = sin(1:20);
% Regress y against A{1}
% Get one cell array of 4 cells from the first element of A
caRowOne = A{1}
% Extract just the first of those 4 cells.
xTraining = caRowOne{1}
% Plot training data.
plot(xTraining, y, 'bo');
hold on;
% Do a fit to a line.
coefficients = polyfit(xTraining, y, 1);
% See how well we did.
x = linspace(min(xTraining(:)), max(xTraining(:)), 40);
fittedY = polyval(coefficients, x);
plot(x, fittedY, 'r-', 'LineWidth', 2);
grid on;
title('Y vs. A{1}', 'FontSize', fontSize);
xlabel('X', 'FontSize', fontSize);
ylabel('Y', 'FontSize', fontSize);

댓글 수: 1

Simon
Simon 2013년 5월 26일
Pretty cool stuff Brah! I will try to loop this for all 15 combinations and then a p-value, F and t-test for each. Thanks a lot!

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

추가 답변 (4개)

Azzi Abdelmalek
Azzi Abdelmalek 2013년 5월 24일
편집: Azzi Abdelmalek 2013년 5월 24일

1 개 추천

V = [1 2 3 4 5 6 7 8 9 0 1 2];
V=reshape(V,4,[]);
for i= 1:3
A{i} = V(:,i)';
end

댓글 수: 6

Simon
Simon 2013년 5월 24일
The reshaping part works fine, but it does not create any variable..
Your variables are
A{1}
A{2}
A{3}
Simon
Simon 2013년 5월 24일
Actually it gives me a variable called A with cell(1,1) = 1 5 9 2 , cell(2,1) = 6 0 3 7 and cell (3,1) = 1 4 8 2 :S
Azzi Abdelmalek
Azzi Abdelmalek 2013년 5월 24일
Why do you want to create A1,A2 and A3, while one variable A is enough ?
If you insist to create A1,A2 and A3 (which is not recomanded)
V = [1 2 3 4 5 6 7 8 9 0 1 2];
V=reshape(V,4,[]);
for i= 1:3
eval([ sprintf('A%d',i) '= V(:,i)'''])
end
Jan
Jan 2013년 5월 25일
@Simon: Don't use EVAL. Creating A1, A2, ... is a bad programming pattern and therefore the most cited question from the FAQ: FAQ: How can I create A1, A2, ... in a loop .
Staying with the original matrix and using V(i, :) would be much more direct and efficient instead of inserting indirect intermediate copies to a bunch of variables, which require crude tricks to be access automatically.

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

Jan
Jan 2013년 5월 25일

1 개 추천

V(i, :) is perfect already. Are you sure that there is any reason for adding a level of abstraction by splitting the matrix to a bunch of vectors?

댓글 수: 2

Simon
Simon 2013년 5월 25일
Will i be able to perform regression on each cell of A(i) with another variable? (cell 1,1 with Y , then Cell 1,2 with Y , etc)
Jan
Jan 2013년 5월 25일
@Simon: It is very likely, that you can perform the regression even with the original matrix directly. The most Matlab commands can handle a matrix input and process the operations for the subvectors automatically. When you post the code you want to apply, more detailed suggestions are possible.
When you want to access the contents of a cell, use the curly braces: A{1} etc.

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

Simon
Simon 2013년 5월 26일

0 개 추천

Thanks everyone! If could accept everyone's answer i would..

댓글 수: 3

Randy Souza
Randy Souza 2013년 5월 31일
Simon, you can always vote for the other answers!
Simon
Simon 2013년 5월 31일
편집: Randy Souza 2013년 5월 31일
How?
Randy Souza
Randy Souza 2013년 5월 31일
There should be a triangle with "x Votes" under the profile picture for the answerer. Click that and it should change to "(x + 1) Votes"

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

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2013년 5월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by