2016-05-23 8 views
2

私はピクセルごとに2つのチャンネルを持つ56の画像の配列を持っています。従って、その形状は(1200,800,52,2)である。私はKNeighborsClassifierを行う必要があり、すべての52の画像のすべてのピクセルが1つの列に収まるように平坦化する必要があります。だから形(1200 * 800 * 52,2)。分類が実行された後、私は正しい順序でそれらの形状を変えることができることを知る必要があります。数の少ない配列の形状を整えたり変形したりしますか?

最初の手順として、私は同じ配列を変形して変形し、元の配列と同じにしようとしています。ここで

が動作するようには思えない私が試したものです:

In [55]: Y.shape 
Out[55]: (1200, 800, 2, 52) 

In [56]: k = np.reshape(Y,(1200*800*52,2)) 

In [57]: k.shape 
Out[57]: (49920000, 2) 

In [58]: l = np.reshape(k,(1200,800,52,2)) 

In [59]: l.shape 
Out[59]: (1200, 800, 52, 2) 

In [60]: assert l == Y 
/Users/alex/anaconda2/bin/ipython:1: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future. 
    #!/bin/bash /Users/alex/anaconda2/bin/python.app 
--------------------------------------------------------------------------- 
AssertionError       Traceback (most recent call last) 
<ipython-input-60-9faf5e8e20ba> in <module>() 

編集:私はKとYの形でエラーをしました。ここで修正されたバージョンは、まだあなたのエラーは、あなたが(最後の軸が52であるYの元の寸法に従わないことreshapeを使用するライン56、であるよう

In [78]: Y.shape 
Out[78]: (1200, 800, 2, 52) 

In [79]: k = np.reshape(Y,(1200*800*52,2)) 

In [80]: k.shape 
Out[80]: (49920000, 2) 

In [81]: l = np.reshape(k,(1200,800,2,52)) 

In [82]: assert Y == l 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-82-6f6815930213> in <module>() 
----> 1 assert Y == l 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
+1

'Y'は'(1200,800,2,52) 'の形をしていますが、'(1200,800,52,2) 'の形をしています。 – unutbu

+0

oops。私は質問とコードを更新しました。別のエラーが発生しますが、まだ再構成は機能していないようです。 – BigBoy1337

答えて

1

(Y == l)は、Ylと同じ形状のブール値配列です。

assert expressionは、ブール値のコンテキストでexpressionと評価されます。つまり、expression.__bool__()が呼び出されます。デザインによって

すべて要素がTrue、またはとき要素のいずれかTrueされているとき__bool__Trueを返す必要があれば、それは明らかではないので、ndarray.__bool__方法は

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

を発生させます。

目的に応じて、allまたはanyメソッドを呼び出すと、エラーを回避できます。

assert (Y == l).all() 

平等のための比較山車は時々平等のための浮動小数点配列を比較し、浮動小数点演算の不正確さに起因する予期しない結果ができ返すことができるので:あなたのケースでは、すべての値が同じであることを主張したいと思いますまた、より安全np.allclose相対許容値を受け取り、絶対許容誤差は、浮動小数点の不正確さに対処するため パラメータこと

assert np.allclose(Y, l) 

注意して行うこと。

+0

これは正しいです。私の場合には、Y = np.transpose(Y、(3,0,1,2))という形を(52,1200,800,2)に追加するのが好きです。これは、それぞれ2チャンネルの800列の1200行の52のケースとして、より直観的な意味を持ちます。それから、.any、.all、.allcloseはすべてうまくアサートされました – BigBoy1337

1

が見えるのにエラーで、ですが、 2と同じように形を変える)。 「52が画像を平坦化」を有するのアイデアをよりよく反映しているようだので、

おそらく、あなたは

k = np.reshape(Y,(1200*800*2,52)) 

を試してみてください。

+0

よく平坦なピクセル値が必要です。 「2」は、aおよびbカラーチャネル用です。この場合、それが失われると思います。 – BigBoy1337

関連する問題