【发布时间】:2017-11-12 04:52:41
【问题描述】:
import numpy as np
np.random.seed(5)
x = np.random.randint(0,10,12)
# array([3, 6, 6, 0, 9, 8, 4, 7, 0, 0, 7, 1])
我想替换 x 的几个子数组,每个子数组对应一个值,例如 avg。在子数组上:
# given the start and end indices for THREE subarrays of x
subary_start, subary_end = np.array([0, 2, 8]), np.array([1, 3, 10])
for i, j in zip(subary_start, subary_end):
val = np.mean(x[i:j+1]) # avg. over the subarray
print(val)
# 4.5, 3, 2.33
预期的输出是
array([4.5, 3, 9, 8, 4, 7, 2.33, 1])。
在我的典型情况下,len(x) 可以是一万个,并且可以有数百个切片,因此非常感谢一个有效的解决方案。
【问题讨论】:
-
您的解决方案有效吗?
-
np.mean()已经以最有效的方式实现。 -
切片的开始和索引是否总是包含在单独的 ndarray 中?
-
@wwii 是的,它可以工作,但有点愚蠢:创建一个与
x长度相同的Trueary,将切片的索引设置为False,同时保留True作为起始索引。使用布尔数组索引x,并将起始索引设置为相应的替换值。 -
@wwii 我将
subary_start和subend_end与另一个函数一起推导出来,我认为它们的格式可以不受这种方式的限制。
标签: python arrays replace slice