Вы можете использовать np.where, чтобы найти индексы, которые вы хотите заменить. Затем, как только вы вычислили новые значения для вставки (предполагая, что они зависят от индекса), вы можете снова использовать np.where для их вставки
#find the indices we want to replace
fill_inds = np.where(a == 0)
#build an array with the values to be inserted into a
fill_values = np.zeros(a.shape)
fill_values[fill_inds] = 100 #this could be some function of the index if you like
#replace the values we want to replace
a = np.where(a == 0, fill_values, a)
Если fill_values является константой, вы можете использовать np.where непосредственно. Если вы хотите что-то сделать с перед тем, как вставить новые значения, вы можете использовать маскированный массив
mask = a == 0 #Array of true/false values
masked_a = np.ma.masked_array(a, mask)
# do stuff to a, without touching the masked values
filled_a = masked_a.filled(fill_value = 'some value')
Надеюсь, это поможет:)