2016-12-09 7 views
-2

numpyのフラット関数はどのように機能しますか?また、これらのインデックスはどのように機能しますか?次のコードをすべて説明してください。Python Numpy Flat Function

res = zeros((n, n), v.dtype) 
res[:n-k].flat[i::n+1] = v 
+1

ウェルカムにStackOverflowに!あなたは["どうすれば良い質問をしますか?"](http://stackoverflow.com/help/how-to-ask)について読んでみるとよいでしょうか。 –

答えて

1

flatの簡単な使用は:

In [410]: res = np.zeros((2,3), dtype=int) 
In [411]: res 
Out[411]: 
array([[0, 0, 0], 
     [0, 0, 0]]) 

In [413]: res.flat[::2]=1 
In [414]: res 
Out[414]: 
array([[1, 0, 1], 
     [0, 1, 0]]) 
In [415]: res.ravel() 
Out[415]: array([1, 0, 1, 0, 1, 0]) 

flatflattenravelの変形です。ここでは、これを使用して、フラット化された配列の他のすべての要素に1を割り当てます。 ravelという表現でそのことが分かります。同じ配列の2次元ビューではあまり明白ではありません。

res[:n-k].flat[i::n+1] = vでは、最初の[:n-k]resのいくつかの行を選択します。私の例では、vからn+1までの値をフラット化配列に割り当てて、flat[]が動作します。

再び小さな例でテスト:

In [417]: res = np.zeros((5,5), dtype=int) 
In [418]: res[:3] 
Out[418]: 
array([[0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0]]) 
In [419]: res[:3].flat[2::6] 
Out[419]: array([0, 0, 0]) 
In [420]: res[:3].flat[2::6]=[1,2,3] 
In [421]: res 
Out[421]: 
array([[0, 0, 1, 0, 0], 
     [0, 0, 0, 2, 0], 
     [0, 0, 0, 0, 3], 
     [0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0]]) 

[i::n+1]インデクシングの使用は、対角線上の値を設定してしまいます。

または

In [422]: res = np.zeros((5,5), dtype=int) 
In [424]: res.flat[0::6] 
Out[424]: array([0, 0, 0, 0, 0]) 
In [425]: res.flat[0::6]=np.arange(5) 
In [426]: res 
Out[426]: 
array([[0, 0, 0, 0, 0], 
     [0, 1, 0, 0, 0], 
     [0, 0, 2, 0, 0], 
     [0, 0, 0, 3, 0], 
     [0, 0, 0, 0, 4]])