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

13 ビュー (過去 30 日間)
Zara Khan
Zara Khan 2018 年 10 月 8 日
コメント済み: Kevin Chng 2018 年 10 月 11 日
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 件のコメント
Zara Khan
Zara Khan 2018 年 10 月 8 日
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 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 件)

KSSV
KSSV 2018 年 10 月 8 日
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 件のコメント
KSSV
KSSV 2018 年 10 月 8 日
I want to keep each of the part into linear as well. ?????example please.
Zara Khan
Zara Khan 2018 年 10 月 8 日
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.

サインインしてコメントする。


Kevin Chng
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 件のコメント
Kevin Chng
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
Kevin Chng 2018 年 10 月 11 日
Does it working for you?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by