下面的代码打印行号solution1
,其中至少有一个非零元素。然而,与这些行号相对应,我如何也打印出哪些位置有非零元素solution2
,如预期输出所示。例如,行1
在位置[1,3,4,6]
处有非零元素,行2
在位置[0,2,3,5]
处有非零元素。
import numpy as np
A=np.array([[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 423.81345923, 0. , 407.01354328,
419.14952534, 0. , 212.13245959, 0. ,
0. , 0. , 0. , 0. ],
[402.93473651, 0. , 216.08166277, 407.01354328,
0. , 414.17017965, 0. , 0. ,
0. , 0. , 0. , 0. ]])
solution1 = []
for idx, e in enumerate(A):
if any(e):
solution1.append(idx)
print("solution 1 =",solution1)
当前输出为
solution 1 = [1,2]
期望输出为
solution 1 = [1,2]
solution 2 = [[1,3,4,6],[0,2,3,5]]
首先使用np.where
查找所有非零值的坐标,然后按行分割y索引:
idx, idy = np.where(A)
np.split(idy, np.flatnonzero(np.diff(idx) != 0) + 1)
# [array([1, 3, 4, 6], dtype=int32), array([0, 2, 3, 5], dtype=int32)]