How can I divide a linear array into 8 equal parts?

13 vues (au cours des 30 derniers jours)
Zara Khan
Zara Khan le 8 Oct 2018
Commenté : Kevin Chng le 11 Oct 2018
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 commentaires
Zara Khan
Zara Khan le 8 Oct 2018
partSum(i) = sum(B(:,i))
this is always giving same values.
partSum =
0 5 10 0 0
partSum =
0 5 10 0 0
partSum =
0 5 10 0 0
partSum =
0 5 10 0 0
partSum =
0 5 10 0 0
I want to count only no of 1's from each of the 5 parts.
Kevin Chng
Kevin Chng le 8 Oct 2018
Modifié(e) : Kevin Chng le 8 Oct 2018
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

Connectez-vous pour commenter.

Réponses (2)

KSSV
KSSV le 8 Oct 2018
You can get non zeros using nnz.
B = reshape(A,[],5)' ;
N = zeros(size(B,1),1) ;
for i = 1:size(B,1)
N(i) = nnz(B(i,:)) ;
end
  3 commentaires
KSSV
KSSV le 8 Oct 2018
I want to keep each of the part into linear as well. ?????example please.
Zara Khan
Zara Khan le 8 Oct 2018
If I am diving a linear array into 8 equal parts then each 8 parts will be also linear. For example [0 0 1 1 0 1], [0 1 1 1 1 ] and so on.

Connectez-vous pour commenter.


Kevin Chng
Kevin Chng le 8 Oct 2018
Modifié(e) : Kevin Chng le 9 Oct 2018
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 commentaires
Kevin Chng
Kevin Chng le 9 Oct 2018
Modifié(e) : Kevin Chng le 9 Oct 2018
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
Kevin Chng le 11 Oct 2018
Does it working for you?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by