2016-12-09 25 views
-2

numpy中的扁平函數是如何工作的?另外,這些指標如何工作?請解釋下面的所有代碼。Python Numpy Flat Function

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

惠康計算器!你會很高興的閱讀[「我如何問一個好問題?」](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表達式中的情況。在同一個數組的二維視圖中,它不那麼明顯。

res[:n-k].flat[i::n+1] = v中,第一個[:n-k]選擇res的某些行。 flat[]在我的示例中起作用,將v中的值分配到展平陣列中的任何n+1元素。

與一個小例子再次測試:

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]])