2010-12-15 17 views
4

2次元配列をスケーリングする方法についてはわかりません。私はウィキペディアで具体的な例を探しましたが、行列の数学ではあまり慣れていないので、私は少し失われています。誰かが正しい方向に私を指すことができるなら、私は本当にそれを感謝します!2次元配列をPythonでどのようにスケールするのですか?

[ 
[0, 0, 1, 1, 1, 1, 0, 0], 
[0, 1, 1, 1, 1, 1, 1, 0], 
[0, 1, 0, 0, 0, 1, 1, 1], 
[0, 0, 0, 0, 0, 0, 1, 1], 
[0, 0, 1, 1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1, 1, 1, 1], 
[1, 1, 0, 0, 0, 0, 1, 1], 
[1, 1, 0, 0, 0, 1, 1, 1], 
[1, 1, 1, 1, 1, 1, 1, 1], 
[0, 1, 1, 1, 1, 0, 1, 1] 
] 
+2

スケールを言うとき、正確にはどういう意味ですか?それを絵として扱う? – configurator

+0

スケーリングは、マトリクスのサイズを変更しない*特定の意味を持ちます(つまり、特定のアフィン変換です)。だから私はあなたがここに何か他のものを指していると思うが、それが何であるかははっきりしない。 –

+0

ええ、それは絵のように扱います。これは、行列の変換が少し違っているように思われるため、解決策を見つけるのに問題が生じた場所だと私は思う。私は、ある意味で、ある意味では、任意のスケールアップまたはアップアップ中に含まれているデータを「保存」したいと思っています。 – coleifer

答えて

8

あなたの配列は、小文字の 'a'文字のバイナリイメージのように見えるので、私はあなたがイメージセンスでスケーリングを意味すると推測しています。

これを行うには、scipy.miscのimresize関数を使用することをお勧めします(これはPILから取ったものです)。ここでは例です:

import numpy as np 
from scipy.misc import imresize 

img = np.array([ 
[0, 0, 1, 1, 1, 1, 0, 0], 
[0, 1, 1, 1, 1, 1, 1, 0], 
[0, 1, 0, 0, 0, 1, 1, 1], 
[0, 0, 0, 0, 0, 0, 1, 1], 
[0, 0, 1, 1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1, 1, 1, 1], 
[1, 1, 0, 0, 0, 0, 1, 1], 
[1, 1, 0, 0, 0, 1, 1, 1], 
[1, 1, 1, 1, 1, 1, 1, 1], 
[0, 1, 1, 1, 1, 0, 1, 1] 
]) 
newimg = imresize(img, (6,5)) 

とnewimgは完璧ではないですが、あなたは簡単に十分な1の255年代を変更することができ、その後

array([[ 0, 0, 255, 255, 0], 
     [ 0, 255, 255, 255, 255], 
     [ 0, 0, 0, 0, 255], 
     [255, 255, 255, 255, 255], 
     [255, 255, 0, 0, 255], 
     [255, 255, 255, 255, 255]], dtype=uint8) 

です。また、Scipyの開発版(現バージョン9)を入手した場合は、some other parameters(imresizeにスクロールしてアンカーなし)を使用して、補間方法やPILモードなどのimresizeに入力できます。

+0

PILを直接使用するときにはなぜscipyを使うのが理にかなっていますか? – martineau

+0

うわー、私は完全にPILを直接使うことを考えましたが、 – coleifer

+0

@martineauに行くのが最善の方法かもしれません。おそらくscipyで結果を使用したいからでしょうか?とにかくそれは私の考えでした。 –

2

疑問がある場合は、ライブラリを使用してください。

PILには、イメージのサイズを変更する機能があります。これは、後で行うスケーリングの種類を前提としています。リストのリストをPILイメージに変換するには、まずnumpyの配列then to PIL formatに変換します。完了したら、プロセスを元に戻して、リストをもう一度入手することができます(本当に必要な場合)。

関連する問題