Python Numpy Flat函数

时间:2016-12-09 19:00:53

标签: python numpy

numpy中的flat功能如何工作?另外,这些索引如何工作?请解释以下所有代码。

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

1 个答案:

答案 0 :(得分: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表达式中看到这种情况。在同一阵列的2d视图中,它有点不太明显。

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