I have a matrix around 20,000 by 20 and when I use this codes it only returns 1000 by 20. I'm sure the problem has to be on the for loop I just don't know how to get this function to show me the whole matrix.
function ....
i=length(data_2);
for i=1:data_2
fprintf...
.....
end
end

댓글 수: 13

KSSV
KSSV 2017년 12월 8일
Don;t use length.......check with size. length gives you only maximum dimension......
Stephen23
Stephen23 2017년 12월 8일
Never use length in your code, because its output is not very useful. Use size or numel as required, but never use length.
These two lines are weird (and wrong)!
i=length(data_2);
for i=1:data_2_
I think you want something like
N = numel(data_2_)
for i=1:N
Rafael
Rafael 2017년 12월 8일
편집: Rafael 2017년 12월 8일
numel fixed the problem. However, now I'm getting another problem since I changed
i=length(data_2) to N=numel(data_2)
The errors says, Index exceeds matrix dimensions.
Error in project (line6)
fprintf('%5.0f', data_2(i,1));
If I change the i to an N it says the same thing as if I leave it as an i.
James Tursa
James Tursa 2017년 12월 8일
Please show the current entire code snippet that is causing the problem.
function [i]=table(data_2)
clc
fprintf('A B C D E F G H I J K L M N O P\n');
N=numel(data_2);
for i=N
fprintf('%1.0f',data_2(i,1));
fprintf('%1.0f',data_2(i,2));
fprintf('%1.0f',data_2(i,3));
fprintf('%1.0f',data_2(i,4));
fprintf('%1.0f',data_2(i,5));
fprintf('%1.0f',data_2(i,6));
fprintf('%1.0f',data_2(i,7));
fprintf('%1.0f',data_2(i,8));
fprintf('%1.0f',data_2(i,9));
fprintf('%1.0f',data_2(i,10));
fprintf('%1.0f',data_2(i,11));
fprintf('%1.0f',data_2(i,12));
fprintf('%1.0f',data_2(i,13));
fprintf('%1.0f',data_2(i,14));
fprintf('%1.0f',data_2(i,15));
fprintf('%1.0f',data_2(i,16));
fprintf('\n')
end
end
See the Answers below to fix your problem. E.g.,
N = size(data_2, 1);
whos data_2 returns
Name Size Bytes Class Attributes
data_2 20,000x20 44k double
Rafael
Rafael 2017년 12월 8일
What do you mean in plain English. It's exactly what I said. I created a function that puts label on top of each columns. The problem is that it's not returning the whole matrix when I call it. It only returns 1000 by 20 matrix instead of the 20,000 by 20. So, when I use size(data_2,1) it only returns the last row of the matrix.
I know it sounds confusing. If you'd see it you would understand what I am trying to do.
To make it clear. I have an array or matrix that has 20,000 rows and 20 columns. When I call the matrix which is called data_2 it returns the whole matrix like this,
Column 1 through 13
.................
Column 14 through 20
.................
I created a function which organize the matrix and puts label on top of each columns like this,
A B C D E F G...
1 2 3 4 5 6 7...
1 2 3 4 5 6 7...
So, the problem is that when I created this function and I called it returns only 1000 rows and 20 columns. It is not returning the whole matrix which is what I want.
function ....
i=length(data_2);
for i=1:data_2
fprintf...
.....
end
end
If I use,
i=size(data_2,1)
n=1:i
It only returns the last row from the matrix.
Rafael
Rafael 2017년 12월 8일
If I run that it returns the whole matrix which is what I want. Now, it doesn't return the headers and it returns the matrix in the wrong order.
Rafael
Rafael 2017년 12월 8일
Yes, I understand you were just giving me an example. I did have something inside that, but it is not returning on top of the columns. I copy you exact code for fprintf.
The order is from 10 13 7 up to row 20,000 for rows and columns is from 1 to 20. These codes returned it as 39 3 41 etc.
The table is something like this, It goes from column 1 to 20 and row 1 to 20,000.
1 2 3 4 5 6 ... 20
10 13 17 43 76 42... 23
.
.
.
20,000
What I explained is that when I run the code you provided me, it returns those numbers in a different order like this,
1 2 3 4 5 6 ... 20
39 3 41 43 9 56... 1
.
.
.
18,390

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

 채택된 답변

Rafael
Rafael 2017년 12월 10일

0 개 추천

Okay, now when I do which cssm is working. It tells me where it is saved.

댓글 수: 5

Rafael
Rafael 2017년 12월 10일
편집: Rafael 2017년 12월 10일
That's where I am getting confused. What is data? I know cohl is the string. Is just telling me undefined function for data.
The issue is when I tried to run your code,
colh = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'};
data = permute( reshape( (1:120), 20,6 ), [2,1] );
fprintf( 1, [repmat( '%4s, ' , 1,20 ),'\n'], colh{:});
fprintf( 1, [repmat( '%4.0f, ', 1,20 ),'\n'], data );
This returns a 6 rows and 20 columns matrix with the strings on top. So, when I tried to run this,
cssm(data,colh)
It returns, Error using cssm Too many input arguments.
function [colh]=cssm( data_2)
clc
colh = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'};
fprintf( [repmat( '%4s, ', 1,16 ),'\n'], colh{:} )
N = size( data_2, 1 );
for ii = 1 : N
fprintf([repmat('%4.0f, ',1,16),'\n'], data_2(ii,:))
end
end
Rafael
Rafael 2017년 12월 10일
Okay, I changed it. Now when I run cssm(data,colh) it returns the matrix from column 1 to 20 and row 1 to 101. Organized.
Rafael
Rafael 2017년 12월 11일
It returned the strings and the data which looks organized like in the original. However, it return it horizontally which doesn't fit in the command windows. It return and error.

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

추가 답변 (0개)

카테고리

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

질문:

2017년 12월 8일

댓글:

2017년 12월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by