根据预定义的数组值填充numpy数组

时间:2019-06-16 21:54:41

标签: python numpy

我有一个A数组,其中一些索引填充有一个,其他值为nans。

A:[nan nan nan nan nan nan 1. 1. nan nan nan nan nan nan nan nan nan nan 1. 1. nan nan nan nan nan nan 1. nan nan nan nan 1. nan nan nan nan 1。楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠]

type(A):类'numpy.ndarray'

有没有一种方法可以在值之后递增值(不使用任何类型的循环,仅使用过滤,索引和广播),并获得生成的B数组:

B:[nan nan nan nan nan nan 1. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 12. 1. 1. 2. 3. 4. 5 。6. 7. 1. 2。   3. 4. 5. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 10. 11. 12. 13. 14. 15. 16. 17. 18. 18. 19 20. 21. 22. 23 。24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39。]

1 个答案:

答案 0 :(得分:1)

是:

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.])