python - 如何将不需要的值变为 0?
问题描述
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 1 1 1 0 0 0 0 0 1 1 0 0 3 3 0 0 0 4 4 0 0 0 5 5 5 5 0 0 2 2 2 2 2 0 2 2 2 2 2 0 0 0 6 6 6 6 6 6 0 6 6 6 6]
[0 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 6 6 6 6 6 6 6 6 6 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 0 0 5 5 5 0 2 2 0 0 2 2 0 0 0 2 2 0 0 6 6 0 0 6 6 6 0 0 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 5 0 0 0 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
[0 1 1 0 0 0 0 0 0 7 0 0 0 3 3 0 0 0 4 4 0 0 0 0 5 5 5 5 5 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]]
作为第一步,我使用此行将所有无 0 元素转换为 1:
binary_transform = np.array(labels).astype(bool).astype(int)
但我无法调整该行以满足不同的要求,因为现在我想将除给定数字之外的所有数字转换为 0,它可能是 1 个元素,也可能是所有元素,所以我将不得不使用一个列表比方说:
elements_to_keep = [2,4]
所以所有的 1,3,5,6,7 都将被转换为 0,我的矩阵中的 4 和 2 的值将保持不变。
解决方案
您可以使用numpy.isin
:
data = numpy.arange(7)
# array([0, 1, 2, 3, 4, 5, 6])
data[~numpy.isin(data, elements_to_keep)] = 0
# array([0, 0, 2, 0, 4, 0, 0])
至于,您也可以只分配新值binary_transform
,而不是强制转换bool
data[data != 0] = 1
或使用numpy.sign
data = numpy.sign(data)
推荐阅读
- couchdb - 我可以使用没有 url 的数据库名称在 CouchDB 中开始复制吗?
- android - 如何在房间数据库中使用多项选择
- sumo - SUMO 中的结果命令
- debugging - 如何在 VS Code 调试器开发中激活新的执行行和新文件
- oracle - 在 BIP 报告中传递参数
- typescript - 表示除未定义之外的所有内容的 TypeScript 类型
- c++11 - 如何在不对其进行 couts 的情况下减少浮点数小数位数
- javascript - 浏览器中的并行性
- c++ - 使用邻接表 C++ 实现 Dijkstra
- c# - Xamarin.FilePicker 返回 null FileData 对象