Заполнить пустой массив в соответствии с предопределенными значениями массива - PullRequest
1 голос
/ 17 июня 2019

У меня есть массив A, в котором некоторые индексы заполнены единицами, другие значения равны nans.

A: [нан нан нан нан нан нан нан 1. 1. нан нан нан нан нан нан наннан нан нан 1. 1. нан нан нан нан нан нан 1. нан нан нан нан 1. нан нан нан нан нан нан нан нан нан нан нан нан нан нан нан нан нан нан нан наннан нан нан нан нан нан нан нан]

тип (A): класс 'numpy.ndarray'

Есть ли способ увеличивать значения после них (без использования каких-либо циклов), только с фильтрацией, индексированием и трансляцией) и получить этот результирующий массив B:

B: [нан нан нан нан нан нан нан 1. 1. 2. 3. 4. 5. 6. 7. 8.9. 10. 11. 12. 1. 1. 2. 3. 4. 5. 6. 7. 1. 2. 3. 4. 5. 1. 2. 3. 4. 5. 6. 7. 8.9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19 20. 21. 22. 23. 24. 25. 26. 26. 28. 29. 30. 31. 32. 33. 3435. 36. 37. 38. 39.]

1 Ответ

1 голос
/ 17 июня 2019

Yep:

B = np.ones_like(A)
ons, = np.where(A==1)
if ons.size:
    B[:ons[0]] = np.nan
    if ons.size > 1:
        B[ons[1:]] -= np.diff(ons)
    B[ons[0]:] = B[ons[0]:].cumsum()
B
# array([nan, nan, nan, nan, nan, nan, nan,  1.,  1.,  2.,  3.,  4.,  5.,
#         6.,  7.,  8.,  9., 10., 11., 12.,  1.,  1.,  2.,  3.,  4.,  5.,
#         6.,  7.,  1.,  2.,  3.,  4.,  5.,  1.,  2.,  3.,  4.,  5.,  6.,
#         7.,  8.,  9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19.,
#        20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
#        33., 34., 35., 36., 37., 38., 39.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...