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