Interp1 on a cell array
8 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Image Analyst
2018 年 12 月 7 日
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.
採用された回答
Stephen23
2018 年 12 月 7 日
編集済み: Stephen23
2018 年 12 月 7 日
>> 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 = []
その他の回答 (2 件)
Image Analyst
2018 年 12 月 7 日
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?
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Resizing and Reshaping Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!