How can I reshape single column vector list into equally sized matrix columns

9 ビュー (過去 30 日間)
lil brain
lil brain 2022 年 1 月 9 日
コメント済み: lil brain 2022 年 1 月 9 日
Hi,
I have a single column vector variable with a list of 26599 elements. I want to reshape this list into a matrix of equally sized columns of 512. The issue is that the number 26599 isn't divisible by 512 and so I get an error. Hence, I want to reshape the vector into matrix colums where all columns have the size of 512 except for the last one.
How would I go about doing this?
I tried the reshape function but that didnt work because of the issue mentioned above.
>> R = reshape(sample_test,512,[]);
Error using reshape
Product of known dimensions, 512, not divisible into total number of elements, 26599.
Thank you!

採用された回答

Voss
Voss 2022 年 1 月 9 日
You can't have a matrix with different size columns, but you could fill the last column with NaNs:
sample_test = ones(520,1);
% append NaNs to sample_test up to the next multiple of block_size
block_size = 512;
N = block_size*ceil(numel(sample_test)/block_size);
sample_test(end+1:N) = NaN;
R = reshape(sample_test,512,[])
R = 512×2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 NaN 1 NaN
  5 件のコメント
Voss
Voss 2022 年 1 月 9 日
You can make sample_test a column vector like this:
sample_test = sample_test(:);
and then use my code on that.
lil brain
lil brain 2022 年 1 月 9 日
Beautiful! This works!

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

その他の回答 (1 件)

Torsten
Torsten 2022 年 1 月 9 日
編集済み: Torsten 2022 年 1 月 9 日
s = mod(26599,512);
n = 26599 - s;
m = n/512;
R = horzcat(reshape(sample_test(1:n),512,m),vertcat(sample_test(n+1:end),NaN(512-s,1)));
  2 件のコメント
lil brain
lil brain 2022 年 1 月 9 日
When running this code I get the error:
Index exceeds the number of array elements (1040).
What am I doing wrong?
Torsten
Torsten 2022 年 1 月 9 日
Corrected, I think.

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

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by