我的代码当前如下:
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。
我猜想列表理解将是最简单的,但是我在表格上苦苦挣扎。感谢您的输入。
答案 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 进行枚举。