2016-08-06 1 views

答えて

1

が頭に浮かぶ:

[~,result] = min(bsxfun(@gt, y(:), x(:).'), [], 2) 

あなたはy列の上に複製されるとxが行の上に複製されると2つの2Dのマトリックスを作成することができ、放送を利用することができます。私は、の逆のを取ります。それぞれの値がyの場合、最初の場所はで、最も小さいのはです。その結果、yに各値の解が与えられます。私はmaxを使ってこれに接近し、比較操作を逆にしてもいいかもしれませんが、私はこの方法がより好きです。

実行例

>> x = [1 3 5 7 9 11 13 15] 

x = 

    1  3  5  7  9 11 13 15 

>> y = [3 4 5 9 10 11] 

y = 

    3  4  5  9 10 11 

>> [~,result] = min(bsxfun(@gt, y(:), x(:).'), [], 2) 

result = 

    2 
    3 
    3 
    5 
    6 
    6 

マイナー注

私はあなたがベクトルxが部分的に注文した(したがって、単調されているので、線形補間:)

+0

はい、あなたの権利です。ありがとう。 – sisaman

+0

問題ありません。私はあなたの最終目標が何であるかを知っているので、私はあなたのために適切な複製をマークしました。がんばろう! – rayryeng

0

のためにこれを使用するつもりな感覚を持っています)、y内のすべての項目に対してxを横断する必要があります。次のコードは、MATLABで動作するはずです:

lastOccurrence=1 
for i = 1:length(y) 
    for j = lastOccurrence:length(x) 
    if y(i)<x(j) 
     lastOccurence=j-1 
     result(i) = j-1 
     break 
    end 
    end 
end 
関連する問題