Python:替换numpy数组的每个第5个值

nat*_*002 2 python numpy

我有一个装满浮子的numpy阵列.如何更换每个第5个值,np.inf*0以便NaN在每个第5个索引获得一个值?

my_array = np.array([5.0, 8.1, 3.2, 2.7, 8.4, 4.9 ...])
Run Code Online (Sandbox Code Playgroud)

my_array = np.array([5.0, 8.1, 3.2, 2.7, NaN, 4.9 ...])
Run Code Online (Sandbox Code Playgroud)

等等.

mdm*_*dml 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])
Run Code Online (Sandbox Code Playgroud)

  • 使用`np.arange(20.)`而不是`np.array(range(20))`来避免创建中间列表并使值实际上为"nan"而不是"-9223372036854775808".`.`是使dtype浮点数(或`np.arange(20,float)`,因为`np.nan`不存在为整数(在输出中可以看到). (3认同)
  • 他想改变`my_array [4 :: 5]` (2认同)

Vee*_*rac 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])
Run Code Online (Sandbox Code Playgroud)