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 Kommentare

Stephen23
Stephen23 am 7 Dez. 2018
Bearbeitet: Stephen23 am 7 Dez. 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.
Image Analyst
Image Analyst am 7 Dez. 2018
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 am 7 Dez. 2018
Thank you. I mean A should have curly brackets, not square.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stephen23
Stephen23 am 7 Dez. 2018
Bearbeitet: Stephen23 am 7 Dez. 2018

1 Stimme

>> 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 Kommentar

Sam Smith
Sam Smith am 7 Dez. 2018
Thank you. I'm happy you focussed on the substance of my question.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

madhan ravi
madhan ravi am 7 Dez. 2018
Bearbeitet: madhan ravi am 7 Dez. 2018

1 Stimme

you may look into fillmissing released in 2016b
Image Analyst
Image Analyst am 7 Dez. 2018

0 Stimmen

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?

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by