2017-07-11 18 views
3

にズーム/拡大は、私は次の配列を持っているnumpyの配列

b = [[2 2 2 3 3 3 5 5 5] 
    [2 2 2 3 3 3 5 5 5] 
    [2 2 2 3 3 3 5 5 5] 
    [4 4 4 6 6 6 7 7 7] 
    [4 4 4 6 6 6 7 7 7] 
    [4 4 4 6 6 6 7 7 7] 
    [1 1 1 5 5 5 7 7 7] 
    [1 1 1 5 5 5 7 7 7] 
    [1 1 1 5 5 5 7 7 7]] 

だから私は、次のコマンドを使用しています:

この質問と回答に基づいてここにResampling a numpy array representing an image

はしかし、私が取得していますがこのです:

b = [[2 2 3 3 3 3 5 5 5] 
    [2 2 3 3 3 3 5 5 5] 
    [4 4 6 6 6 6 7 7 7] 
    [4 4 6 6 6 6 7 7 7] 
    [4 4 6 6 6 6 7 7 7] 
    [4 4 6 6 6 6 7 7 7] 
    [1 1 5 5 5 5 7 7 7] 
    [1 1 5 5 5 5 7 7 7] 
    [1 1 5 5 5 5 7 7 7]] 

私は拡張が3で正確にしたい、または任意のズーム倍率があるが、現在、それは配列の各要素に異なるのです。

これを行う直接的な方法はありますか?あるいは、何らかのコーディングで手動で行うのでしょうか?

答えて

5

が、completnessのために:Numpy Kron完璧

>>> import numpy as np 
>>> a = np.array([[2,3,5], [4,6,7], [1,5,7]]) 
>>> np.kron(a, np.ones((3,3))) 
array([[ 2., 2., 2., 3., 3., 3., 5., 5., 5.], 
     [ 2., 2., 2., 3., 3., 3., 5., 5., 5.], 
     [ 2., 2., 2., 3., 3., 3., 5., 5., 5.], 
     [ 4., 4., 4., 6., 6., 6., 7., 7., 7.], 
     [ 4., 4., 4., 6., 6., 6., 7., 7., 7.], 
     [ 4., 4., 4., 6., 6., 6., 7., 7., 7.], 
     [ 1., 1., 1., 5., 5., 5., 7., 7., 7.], 
     [ 1., 1., 1., 5., 5., 5., 7., 7., 7.], 
     [ 1., 1., 1., 5., 5., 5., 7., 7., 7.]]) 
+0

決して遅くない!公正であるために、この回答は@MSeifertの回答よりも完全で簡単に実装できます。その答えは2D配列にはうまくいきましたが、私は3D配列にそれを適用することが困難でした。 答えのもう一つの点は、各ディメンションの展開値を別々に決めることができることです。これは、すべての方向に同じ値で配列を展開したくない場合です。 私が間違いなく言っているのは、これが答えです。 – philippos

+0

"私の3Dアレイに適用するのが困難だと分かった"という意味の例を指定したり、例を挙げたりできますか? –

1

が正確にあなたがnumpyのか、scipyのダウンロードに何をしたいん機能だが、それが1を自分で簡単に作成できます場合、私は知らない。

>>> a = [[2,3,5], [4,6,7], [1,5,7]] 

>>> zoom(a,3) 
array([[2, 2, 2, 3, 3, 3, 5, 5, 5], 
     [2, 2, 2, 3, 3, 3, 5, 5, 5], 
     [2, 2, 2, 3, 3, 3, 5, 5, 5], 
     [4, 4, 4, 6, 6, 6, 7, 7, 7], 
     [4, 4, 4, 6, 6, 6, 7, 7, 7], 
     [4, 4, 4, 6, 6, 6, 7, 7, 7], 
     [1, 1, 1, 5, 5, 5, 7, 7, 7], 
     [1, 1, 1, 5, 5, 5, 7, 7, 7], 
     [1, 1, 1, 5, 5, 5, 7, 7, 7]]) 

from __future__ import division 
import numpy as np 

def zoom(a, factor): 
    a = np.asarray(a) 
    slices = [slice(0, old, 1/factor) for old in a.shape] 
    idxs = (np.mgrid[slices]).astype('i') 
    return a[tuple(idxs)] 

それは期待される結果を与えます

浮動小数点精度(スライスのステップ引数)のために、そのアプローチが問題を抱えている可能性があります。たぶん、少し遅れて

+1

私が望んでいた正確にどのような仕事をされません!ありがとう。私は 'slice'と' np.ngrid'にまだ慣れていないので、私は現在の知識によれば完全に異なる方法で解決していましたが、あなたの関数は私が望むものとまったく同じでした。私は非正方形の浮動小数点型の配列のためにそれをテストし、それは完璧に働いた。 – philippos

関連する問題