首页 > 解决方案 > 如何将一个数组分成两个数组,以便在一个数组中有零行和其他非零行

问题描述

我尝试划分字段,以便在一个种姓中存在矩阵的一部分,其中有零,而在另一个字段中将有非零值。

我尝试划分字段,以便在一个种姓中存在矩阵的一部分,其中有零,而在另一个字段中将有非零值。

import numpy as np

C1_1=np.array([[ 0, -4,  6],
       [ 0, -5,  7],
       [-1,  0,  6],
       [-1, -4,  7],
       [-1, -5,  8]])
C1_B= np.split(C1_1, np.where(C1_1[:, 0]!= 0.)[0][1:])
print(C1_B)

输出:

[array([[ 0, -4,  6],
       [ 0, -5,  7],
       [-1,  0,  6]]), array([[-1, -4,  7]]), array([[-1, -5,  8]])]

sp

C1_B[0]
array([[ 0, -4,  6],
       [ 0, -5,  7],
       [-1,  0,  6]])


C1_B[1]
array([[-1, -4,  7]])


C1_B[2]
array([[-1, -5,  8]])

所需输出

[array([[ 0, -4,  6],
           [ 0, -5,  7],
           [-1,  0,  6]]), array([[-1, -4,  7], [-1, -5,  8]])

所以

C1_B[0]
array([[ 0, -4,  6],
       [ 0, -5,  7],
       [-1,  0,  6]])

C1_B[1]
array([[-1, -4,  7]
       [-1, -5,  8]])

所以 2 部分对我来说就足够了,而不是 3 部分有人可以告诉我吗?

标签: pythonnumpysplit

解决方案


国际大学联盟:

# check any zero in each row
has_zero = (C1_1 == 0).any(1)

# find the split between zeros and non zeros
split_idx = np.flatnonzero(np.diff(has_zero)) + 1

# split on index
np.split(C1_1, split_idx)

#[array([[ 0, -4,  6],
#       [ 0, -5,  7],
#       [-1,  0,  6]]), array([[-1, -4,  7],
#       [-1, -5,  8]])]

推荐阅读