How to repeat element of array to complete Specific shape In matlab

Hello Everyone i hope you are doing well. I have the following dataset
One has 30 samples ( Shape 30x1) and other has 115 samples(Shape 115x1) . My network is trained on shape (1000x1). I want to repeat elements of the array from start to complete 1000 samples.
The samples varries (10-1000) like shape is 10x1 or 388x1
for example the data is look like that, so it will repeat from start to complete 1000 samples
[335
385
227
185
184
462]
How can i do it in MATLAB

 Réponse acceptée

The desired result is not obvious. Simply repeating with repmat will not work because both data set lengths are not integral divisors of 1000 so the last copy will be incomplete in that instance.
One option is to interpolate —
LD = load('dataset1.mat');
dataset1 = LD.dataset1;
xq = linspace(1, numel(dataset1), 1000);
method = 'nearest';
stretch1 = interp1((1:numel(dataset1))',dataset1, xq', method);
See if that does what you want. If so, do it with ‘dataset2’ as well.
See the documentation for interp1 to consider other method options if 'nearest' does not give the desired result.
.

5 commentaires

Med Future
Med Future le 10 Mar 2022
Modifié(e) : Med Future le 10 Mar 2022
@Star Strider No its not what i want your repeating same number, but i want to repeat array elements to complete 1000.
like
[335
385
227
185
184
462]
i want to repeat whole array, not 335 335 335
@Star Strider if its greater then 1000 we can remove that.
But how can i do that?
In that instance (that 1000 is not an absolute limit), I would do something like this —
LD = load('dataset1.mat');
dataset1 = LD.dataset1;
DesiredLength = 1000;
repeats = ceil(DesiredLength/numel(dataset1)) % Use 'floor' Or 'ceil'
stretch1 = repmat(dataset1, repeats, 1);
For floor the ‘stretch1’ length is 990 and for ceil it is 1020. The ‘repeats’ value must be an integer.
The same code applies to ‘dataaset2’ if this works.
.
@Star Strider what i have to do to remove extra value which is greater then 1000?
That is straightforward —
LD = load('dataset1.mat');
dataset1 = LD.dataset1;
DesiredLength = 1000;
repeats = ceil(DesiredLength/numel(dataset1)) % Use 'floor' Or 'ceil'
stretch1 = repmat(dataset1, repeats, 1);
stretch1 = stretch1(1:DesiredLength); % Snip At 'DesiredLength' To Remove Extra Elements
There are also other ways, although that is the easiest.
EDIT — (11 Mar 2022 at 6:14)
There is one other way I can think of to do this, however it involves some compromises since it ‘squeezes’ the 1020-element vector into 1000 elements, or ‘stretches’ the 990-element vector to 1000 elements (both will work with this code, although I am only showing one here):
x1 = 1:numel(stretch1); % Match 'stretch1' Length
xq = linspace(1, numel(stretch1), DesiredLength); % 'DesiredLength' Interpolation Vector
squeeze1 = interp1(x1, stretch1, xq); % Interpolate (Decimal Fractions)
squeeze1i = round(squeeze1); % Integers Only
figure
subplot(3,1,1)
plot(x1, stretch1)
xlim([1 numel(stretch1)])
grid
title(sprintf('Original Vector, Length = %d',numel(stretch1)))
subplot(3,1,2)
plot(xq, squeeze1)
xlim([1 numel(stretch1)])
grid
title(sprintf('Squeezed Vector, Length = %d',numel(squeeze1)))
subplot(3,1,3)
plot(xq, squeeze1i)
xlim([1 numel(stretch1)])
grid
title(sprintf('Squeezed Integer Vector, Length = %d',numel(squeeze1i)))
.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange

Produits

Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by