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

标签 python numpy

我有一个 A 数组,其中一些索引填充了 1,其他值是 nan。

A: [ 楠楠楠楠楠楠楠楠楠 1. 1. 楠楠楠楠楠楠楠楠楠楠楠楠楠楠 1. 1. 楠楠楠楠楠楠楠 1. 楠楠楠楠 1. 楠楠楠楠Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan Nan]

类型(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.27.28.29.30.31.32.33.34.35.36.37.38.39.]

最佳答案

是的:

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

关于python - 根据预定义的数组值填充 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622890/

相关文章:

python - Pandas - 将特定 iloc 的值添加到新的数据框列中

python - 迭代numpy矩阵并获取score gt的所有值

python - 通过模拟更改日志级别

python - 为什么Python 3.10中关键字 `match`可以作为变量名或函数名?

python - 在 Python 2.7 中创建 (a,b) 点的 X × Y 维数组

python - 使用 Python 从字符串中提取 2 位整数

Python 重新返回不匹配的行

Python - 检测远程计算机是否开启

python - 哪里有接触优秀 Django 开发人员的好地方?

Python从列表a中查找列表b中的项目索引