Numpy:替换数组前半部分中的每个n元素

时间:2016-02-16 17:46:38

标签: python python-2.7 numpy

如果我有一个numpy数组并希望在数组的前半部分将每个第n个元素替换为0(后半部分没有变化),我该如何有效地执行此操作?现在我的代码不够高效:     for x in xrange(1,half,n):         s [i] = 0

2 个答案:

答案 0 :(得分:3)

只需使用a[:a.size//2:n] = 0即可。 e.g:

a = np.ones(10)
a[:a.size//2:2] = 0
a
array([ 0.,  1.,  0.,  1.,  0.,  1.,  1.,  1.,  1.,  1.])

另一个例子:

a = np.ones(20)
n = 3
a[:a.size//2:n] = 0

a
array([ 0.,  1.,  1.,  0.,  1.,  1.,  0.,  1.,  1.,  0.,  1.,  1.,  1.,
    1.,  1.,  1.,  1.,  1.,  1.,  1.])

答案 1 :(得分:1)

您可以通过执行以下操作来切割数组:

import numpy as np
# make an array of 11 elements filled with zeros
my_arr = np.zeros(11)

# get indexes to change in the array. range is: range(start, stop[, step])
a = range(0, 5, 2)
# print the original array
print my_arr 

# Change the array
my_arr[a] = 1

# print the changes
print my_arr

输出:

array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
array([ 0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])