列表理解的逻辑索引

Logical indexing with list comprehensions

我目前的代码如下:

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,具体取决于索引是否为 +/-。

我猜列表理解是最简单的,但我正在努力处理表格。感谢您的意见。

最简单的方法应该是使用索引来设置值然后将其展平,如果要求:

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 来创建另一个 一维数组,你丢失了原始ndarray的索引信息。因此,对于 list comprehension,您可能需要对新创建的一维数组和原始 ndarray[=26] 进行 enumerate =]同时。