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

14 Ansichten (letzte 30 Tage)
Zara Khan
Zara Khan am 8 Okt. 2018
Kommentiert: Kevin Chng am 11 Okt. 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 Kommentare
Zara Khan
Zara Khan am 8 Okt. 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 am 8 Okt. 2018
Bearbeitet: Kevin Chng am 8 Okt. 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

Melden Sie sich an, um zu kommentieren.

Antworten (2)

KSSV
KSSV am 8 Okt. 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 Kommentare
KSSV
KSSV am 8 Okt. 2018
I want to keep each of the part into linear as well. ?????example please.
Zara Khan
Zara Khan am 8 Okt. 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.

Melden Sie sich an, um zu kommentieren.


Kevin Chng
Kevin Chng am 8 Okt. 2018
Bearbeitet: Kevin Chng am 9 Okt. 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 Kommentare
Kevin Chng
Kevin Chng am 9 Okt. 2018
Bearbeitet: Kevin Chng am 9 Okt. 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 am 11 Okt. 2018
Does it working for you?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by