python - 如何将 2d np.array 中的每十分之一(非零)值替换为零
问题描述
我一直在尝试,但没有奏效。
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
解决方案
一种方法是使用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
推荐阅读
- c# - ElasticBeanstalk 更改文件
- android - “支持即时应用”是什么意思?如果我检查它会发生什么
- javascript - 如何在 AWS S3 中上传 Image Buffer 数据?
- android - 如何从 android app bundle 的 apk 列表中确定正确的 apk
- javascript - Webpack:限制动态导入的块文件
- python-3.x - 使用 opencv 在 Python 中实现光流的问题
- php - 如何处理 500 内部服务器错误?我需要在运行时为此提供错误/异常处理选项。?
- html - 谷歌字体不显示
- c++ - 了解输入和输出流缓冲区实际工作方式的程序
- java - Android 应用内更新,我应该在哪里设置更新类型?