Логическая индексация со списком - PullRequest
0 голосов
/ 25 июня 2018

Мой код в настоящее время выглядит следующим образом:

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 голосов
/ 25 июня 2018

Самый простой способ - использовать индексы для сброса значений , , а затем сгладить их, если требуется :

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 .Следовательно, для понимания списка вам может потребоваться перечислить как для вновь созданных 1D-массивов, так и для исходного ndarray одновременно.

...