具有列表理解的逻辑索引

时间:2018-06-25 16:26:41

标签: python list-comprehension matrix-indexing

我的代码当前如下:

z = np.diagflat(c).dot(D).dot(x);
idxN, idxP = z<0, z>=0 # logical indexing
y1 = [-1 + np.exp(x)/(1+np.exp(x)) for x in z[idxN]]
y1 = np.array(y1) # Size (504,)
y2 = [-np.exp(-x)/(1+np.exp(-x)) for x in z[idxP]]
y2 = np.array(y2) # Size (496,)

现在,我试图形成一个(1000,)列表y,该列表将根据索引是否为+/-并包含y1或y2。

我猜想列表理解将是最简单的,但是我在表格上苦苦挣扎。感谢您的输入。

1 个答案:

答案 0 :(得分:1)

最简单的方法应该是使用索引重新设置值 然后根据需要将其变平

z_out = np.empty(z.shape, dtype='float')
z_out[idxN] = y1                           # values for negative indices
z_out[idxP] = y2                           # values for positive indices

z_out.flatten()                            # flatten it to 1D array, if required

PS: :子集一个 ndarray 来创建另一个 1D数组时,您会松开原始的 ndarray 。因此,对于列表理解,您可能需要同时对新创建的一维数组和原始的 ndarray 进行枚举