How can I divide a linear array into 8 equal parts?
이전 댓글 표시
A=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
This is a long linear array with consecutive 0's and 1's. How can I equally divide this array A into 8 equal parts and count no of 1's from each parts?
댓글 수: 5
Kevin Chng
2018년 10월 8일
Hi,
B = reshape(A,5,[])
There are 125 elements in A, hence it cant be equally divide by 8.
Zara Khan
2018년 10월 8일
Kevin Chng
2018년 10월 8일
How to count no of 1's from each parts ?
if let say we divide into 5 rows:
A=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
B = reshape(A,[],5);
for i=1:1:5
partSum(i) = sum(B(:,i))
end
Does it work for you?
what will be the code when the array size is not predefined?
numEle = numel(A);
for i=1:1:10
try
B = reshape(A,i,[]);
catch
fprintf('array size is not correct %i \n',i);
end
end
Then it will tell you what is the array size you can reshape them.
Zara Khan
2018년 10월 8일
Kevin Chng
2018년 10월 8일
편집: Kevin Chng
2018년 10월 8일
Just noticed the for-loop is not necessary.
B = reshape(A,[],5);
partSum = sum(B)
partSum =
0 5 10 0 0
0 is the total number of 1's in first part, 5 is the second part, 10........so on.
If want be more specific for better understanding, we could
first part = B(:,1);
second part = B(:,2);
third part = B(:,3);
fourth part = B(:,4);
fifth part = B(:,5);
then either use sum(first part) or nnz(firstpart) to count the number of 1's
답변 (2개)
Kevin Chng
2018년 10월 8일
편집: Kevin Chng
2018년 10월 9일
How to count no of 1's from each parts ?
if let say we divide into 5 rows:
B = reshape(A,[],5);
partSum = sum(B);
you could nnz or sum.
What will be the code when the array size is not predefined?
A=[1 2 3; 4 5 6; 7 8 9]
numEle = numel(A);
for i=1:1:10
numberofsize = rem(numEle,i);
if numberofsize ~= 0
fprintf('array size is not correct for %i \n',i)
end
end
Then it will tell you what is the array size you can reshape them.
댓글 수: 7
Zara Khan
2018년 10월 8일
Kevin Chng
2018년 10월 8일
To check which size i am allowed to reshape them.
Zara Khan
2018년 10월 8일
Kevin Chng
2018년 10월 8일
Sorry for my mistake. Edited my answer.
Zara Khan
2018년 10월 8일
Kevin Chng
2018년 10월 9일
편집: Kevin Chng
2018년 10월 9일
Ya, you are right, it is my mistake.
NumEle is counting the number of element. Ya, you are right, i should use rem() instead. If the remainder is not 0, the size is not suitable for our reshape size.
Kevin Chng
2018년 10월 11일
Does it working for you?
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!