Python中如何按指定格式打印数组非零元素的位置
调整np.nonzero()输出为二维数组格式
给定如下NumPy数组,使用np.nonzero()识别非零元素位置时,输出是包含两个一维数组的元组,需要将其转换为每行对应一组坐标的二维数组格式:
现有代码:
import numpy as np y=np.array([[ 0.0, -1.3e-08, 0.0 ], [-1.3e-08, 0.0, 1.4e-9], [0.0, 2.3e-7, 1.9e-6]]) Result=np.nonzero(y) print(Result)
当前输出:
(array([0, 1, 1, 2, 2], dtype=int64), array([1, 0, 2, 1, 2], dtype=int64))
预期输出:
array([[0,1],[1,0],[1,2],[2,1],[2,2]])
解决方案
可以通过以下几种简单方式将输出转换为预期格式:
方法1:使用np.transpose()
直接对np.nonzero()的返回结果做转置操作:
import numpy as np y=np.array([[ 0.0, -1.3e-08, 0.0 ], [-1.3e-08, 0.0, 1.4e-9], [0.0, 2.3e-7, 1.9e-6]]) result = np.transpose(np.nonzero(y)) print(result)
方法2:使用np.column_stack()
将np.nonzero()返回的行、列索引数组按列堆叠:
import numpy as np y=np.array([[ 0.0, -1.3e-08, 0.0 ], [-1.3e-08, 0.0, 1.4e-9], [0.0, 2.3e-7, 1.9e-6]]) rows, cols = np.nonzero(y) result = np.column_stack((rows, cols)) print(result)
方法3:利用数组转置属性.T
将np.nonzero()的结果转为数组后直接调用转置属性:
import numpy as np y=np.array([[ 0.0, -1.3e-08, 0.0 ], [-1.3e-08, 0.0, 1.4e-9], [0.0, 2.3e-7, 1.9e-6]]) result = np.array(np.nonzero(y)).T print(result)
以上三种方法的输出均与预期一致:
array([[0, 1], [1, 0], [1, 2], [2, 1], [2, 2]])
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

