Истинная векторизация, которую я не вижу, но никакое явное для циклов не выполнимо:
X[np.concatenate(I), np.arange(len(I)).repeat(np.vectorize(len)(I))] = np.concatenate(V)
X
# array([[1., 0., 3.],
# [1., 2., 0.],
# [0., 2., 0.],
# [0., 2., 0.]])
Но я не уверен, что это будет быстрее, чем цикл for.