Python Scipy:将阵列划分为3个子阵列

Python Scipy:将阵列划分为3个子阵列,python,arrays,numpy,scipy,Python,Arrays,Numpy,Scipy,我试图弄清楚是否有一个numpy/scipy函数可以使用特定的规则将数组有效地划分为子数组 我的问题如下: 我有一个nxn矩阵,我们称它为W,我有一个向量h。 现在我想将W的列向量划分为3个数组: W_pos,其中对于W_pos的所有向量W>0 W_null,其中对于W_null的所有向量W=0 W_neg,其中对于W_neg的所有向量W

我试图弄清楚是否有一个numpy/scipy函数可以使用特定的规则将数组有效地划分为子数组

我的问题如下: 我有一个nxn矩阵,我们称它为W,我有一个向量h。 现在我想将W的列向量划分为3个数组:

  • W_pos,其中对于W_pos的所有向量W>0
  • W_null,其中对于W_null的所有向量W=0
  • W_neg,其中对于W_neg的所有向量W<0
现在我是这样做的,这是可行的,但我认为这不是很有效:

    nonzero_indices = (sp.isclose(sp.dot(h_k.T, W),0, 10e-12) == False)
    self.W_null = W[:,~nonzero_indices]

    W_nonzero = W[:,nonzero_indices]
    pos_indices = (sp.dot(h_k.T, W_nonzero) > 0)
    W_pos = W_nonzero[:,pos_indices]
    W_neg = W_nonzero[:,~pos_indices]
有更好的办法吗?谢谢你的帮助,如果有什么不清楚的请告诉我。 干杯

wneg=w[w0]

谢谢您的回答。这比我的版本快多少?在这种情况下,我必须遍历整个数组3次,每个分区一次(pos/neg/zero)。在这种编码水平上,推理只能让你走到这一步。我怀疑索引比生成掩码花费的时间更长。效率低下在哪里?生成掩码,还是在索引中?
w=np.random.random((10,10))-0.5 # example array
wneg = w[w<0]

wzero = w[w==0]

wpos = w[w>0]