I have a cell array that contains some numbers and empty spaces, say
A=[ , ,4,5,6,7,,,8,,5, , ,]
I want to interpolate A using interp1('previous') so that it becomes
A=[ , ,4,5,6,7,7,7,8,8,5, , ,]
That it is a cell array is making it difficult to use interp1. What I have got so far is this:
A={betdaqv{5,:}};
x = 1:length(A);
xi = 1:length(A);
emptyloc=find(cellfun(@isempty,A));
zs = emptyloc;
A(zs)=[];
x(zs)=[];
But then applying the following doesn't work:
output1 = interp1(x, A, xi,'previous')
See attached for betdaqv.

3 commentaires

Stephen23
Stephen23 le 7 Déc 2018
Modifié(e) : Stephen23 le 7 Déc 2018
This is not a cell array and it is not valid MATLAB syntax:
A=[ , ,4,5,6,7,,,8,,5, , ,]
Please at least give us something that we can work with.
You forgot to attach betdaqv. Make it easy for us to help you, not hard.
Save betdaqv in a .mat file and then upload
save('answers.mat', 'betdaqv');
Once we have it, we can try things and help you.
Sam Smith
Sam Smith le 7 Déc 2018
Thank you. I mean A should have curly brackets, not square.

Connectez-vous pour commenter.

 Réponse acceptée

Stephen23
Stephen23 le 7 Déc 2018
Modifié(e) : Stephen23 le 7 Déc 2018

1 vote

>> A = {[],[],4,5,6,7,[],[],8,[],5,[],[]};
>> idx = find(~cellfun('isempty',A));
>> idy = idx(1):idx(end);
>> new = interp1(idx,[A{idx}],idy,'previous');
>> A(idy) = num2cell(new);
>> A{:}
ans = []
ans = []
ans = 4
ans = 5
ans = 6
ans = 7
ans = 7
ans = 7
ans = 8
ans = 8
ans = 5
ans = []
ans = []

1 commentaire

Sam Smith
Sam Smith le 7 Déc 2018
Thank you. I'm happy you focussed on the substance of my question.

Connectez-vous pour commenter.

Plus de réponses (2)

madhan ravi
madhan ravi le 7 Déc 2018
Modifié(e) : madhan ravi le 7 Déc 2018

1 vote

you may look into fillmissing released in 2016b
Image Analyst
Image Analyst le 7 Déc 2018

0 votes

In the following code, your A does not have any empty values:
s = load('answers.mat')
betdaqv = s.betdaqv
A={betdaqv{5,:}};
x = 1:length(A);
xi = 1:length(A);
emptyloc=find(cellfun(@isempty,A));
zs = emptyloc;
A(zs)=[];
x(zs)=[];
Why do you think it should?

Catégories

En savoir plus sur Interpolation dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by