Python Scipy:将阵列划分为3个子阵列
我试图弄清楚是否有一个numpy/scipy函数可以使用特定的规则将数组有效地划分为子数组 我的问题如下: 我有一个nxn矩阵,我们称它为W,我有一个向量h。 现在我想将W的列向量划分为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
- 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]