2013-11-27 65 views
2

我有一個充滿浮點的numpy數組。我如何用np.inf*0替換每個第5個值,以便每5個索引得到一個NaN的值?Python:替換numpy數組的每個第5個值

my_array = np.array([5.0, 8.1, 3.2, 2.7, 8.4, 4.9 ...]) 

my_array = np.array([5.0, 8.1, 3.2, 2.7, NaN, 4.9 ...]) 

等。

回答

7

如何使用切片和跨步? L[::5]需要每5元從列表L

>>> my_array = np.arange(20.) 
>>> my_array[4::5] = np.nan 
>>> my_array 
array([ 0., 1., 2., 3., nan, 5., 6., 7., 8., nan, 10., 
     11., 12., 13., nan, 15., 16., 17., 18., nan]) 
+2

他想改變'my_array [4 :: 5]' – stranac

+0

@stranac:好點啊,沒有聽清楚他想跳過第4位。更新。 – mdml

+3

使用'np.arange(20.)'而不是'np.array(range(20))'來避免創建一箇中間列表並使這些值實際爲'nan'而不是'-9223372036854775808'。因爲'np.nan'不是一個整數(如你的輸出中可以看到的那樣),所以'''使得dtype浮點數(或'np.arange(20,float)') – askewchan

6

比@ ALKO的和 更正確的比@ MDML的 簡單。

import numpy 

my_array = numpy.linspace(0, 1, 20) 
my_array 
#>>> array([ 0.  , 0.05263158, 0.10526316, 0.15789474, 0.21052632, 
#>>>   0.26315789, 0.31578947, 0.36842105, 0.42105263, 0.47368421, 
#>>>   0.52631579, 0.57894737, 0.63157895, 0.68421053, 0.73684211, 
#>>>   0.78947368, 0.84210526, 0.89473684, 0.94736842, 1.  ]) 

my_array[4::5] = numpy.nan 
my_array 
#>>> array([ 0.  , 0.05263158, 0.10526316, 0.15789474,   nan, 
#>>>   0.26315789, 0.31578947, 0.36842105, 0.42105263,   nan, 
#>>>   0.52631579, 0.57894737, 0.63157895, 0.68421053,   nan, 
#>>>   0.78947368, 0.84210526, 0.89473684, 0.94736842,   nan]) 
+0

這比@ mdml的答案更正確,因爲數組dtype是float,因此'np.nan'是守恆的。 – askewchan

相關問題