我一直在尝试,但是没有用。
for x in range(0,len(A),10):
for y in range (0,len(A),10):
if x > 0:
if y > 0:
A[index] = 0
答案 0 :(得分:1)
一种方法是使用np.nonzero
查找非零元素的索引,然后简单地将它们的切片设置为零:
i = np.nonzero(A)
A[i[0][::10], i[1][::10]] = 0
例如:
In [128]: A = np.random.randint(0, 2, (8,8))
In [129]: A
Out[129]:
array([[0, 0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 1, 0],
[0, 0, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1, 1, 0],
[1, 1, 0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 0, 0, 1, 0],
[1, 1, 1, 1, 1, 0, 1, 0]])
In [130]: i = np.nonzero(A)
In [131]: A[i[0][::10], i[1][::10]] = 0
In [132]: A
Out[132]:
array([[0, 0, 0, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 1, 1, 0, 1],
[0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1, 1, 0],
[1, 0, 0, 0, 0, 1, 0, 1],
[0, 1, 1, 1, 0, 0, 1, 0],
[1, 1, 1, 0, 1, 0, 1, 0]])
这会将0、10、20等非零索引设置为0。如果您希望使用9、19等,可以更改偏移量:
A[i[0][10-1::10], i[1][10-1::10]] = 0
答案 1 :(得分:0)
这是我解决问题的方法:
index=0
for x in range(0, 219):
for y in range(0, 219):
if (index+1) % 10 == 0:
A[x][y] = 0
index+=1
print(A)
对于任何正在看的人: 我有一个219x219 np.array,我想将每10个非零值都替换为零。
答案 2 :(得分:0)
如果我了解您要正确执行的操作,那么应该很容易做到这一点,只需在循环外添加一个计数器变量来跟踪到目前为止您已经看到了多少个非零元素,并且{{3 }}遍历数组:
# a = np.array(...)
count = 0
for x in np.nditer(a, op_flags=['readwrite']):
if x != 0:
count += 1
if count % 10 == 0:
x[...] = 0
测试数组:
[[ 0. 1. 2. 3. 4. 0. 5. 6. 0. 7. 0. 0.]
[ 8. 0. 9. 0. 10. 0. 11. 12. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 13. 14. 0. 0. 0. 15. 16.]
[ 0. 0. 0. 0. 0. 17. 18. 0. 0. 0. 0. 19.]
[ 20. 0. 21. 22. 0. 0. 0. 23. 0. 24. 0. 0.]
[ 25. 0. 0. 26. 27. 0. 28. 0. 29. 0. 0. 0.]
[ 0. 0. 30. 31. 0. 0. 32. 0. 33. 34. 35. 36.]
[ 37. 0. 0. 0. 38. 0. 39. 0. 40. 41. 0. 0.]
[ 0. 42. 43. 0. 44. 0. 45. 46. 47. 0. 48. 49.]
[ 0. 50. 51. 52. 0. 53. 0. 54. 55. 0. 56. 0.]]
之后:
[[ 0. 1. 2. 3. 4. 0. 5. 6. 0. 7. 0. 0.]
[ 8. 0. 9. 0. 0. 0. 11. 12. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 13. 14. 0. 0. 0. 15. 16.]
[ 0. 0. 0. 0. 0. 17. 18. 0. 0. 0. 0. 19.]
[ 0. 0. 21. 22. 0. 0. 0. 23. 0. 24. 0. 0.]
[ 25. 0. 0. 26. 27. 0. 28. 0. 29. 0. 0. 0.]
[ 0. 0. 0. 31. 0. 0. 32. 0. 33. 34. 35. 36.]
[ 37. 0. 0. 0. 38. 0. 39. 0. 0. 41. 0. 0.]
[ 0. 42. 43. 0. 44. 0. 45. 46. 47. 0. 48. 49.]
[ 0. 0. 51. 52. 0. 53. 0. 54. 55. 0. 56. 0.]]
注意:10、20、30、40和50已更改为0。