gpt4 book ai didi

python - 填充指定索引之间的向量值

转载 作者:行者123 更新时间:2023-12-01 00:33:50 24 4
gpt4 key购买 nike

从向量开始a和一个列表ind索引,我想设置 a 的元素对应于 ind 中的索引作为原始向量的函数(在示例中,我将在原始值上加 10),并希望保留与 ind 中的每个索引对应的计算值。对于所有后续元素,直到下一个索引。

例如,给定:

a = [10, 11, 12, 13, 14, 15]
ind = [0, 2, 4]

返回:

result = [20, 20, 22, 22, 24, 24]

您可以注意到 a 的元素不对应于 ind 中的索引完全无关。此外,如果第一个元素的索引不在 ind 中,则第一个元素存在不确定性。 ,所以我希望能够为 0 使用的第一个元素设置默认值不在 ind 中,那么完整的测试用例集是:

#test
a = np.array([10, 11, 12, 13, 14, 15])

fill(a, [2, 4], -50)
#[-50, -50, 22, 22, 24, 24]
fill(a, [0, 2, 4], -50)
#[20, 20, 22, 22, 24, 24]
fill(a, [0, 2, 4, 5], -50)
#[20, 20, 22, 22, 24, 25]

我可以很容易地用循环来做到这一点,但是如果向量 a 这会很慢很大:

def fill(a, ind, startval):
res = np.zeros(len(a) + 1)
res[0] = startval
for i in range(len(a)):
if i in ind:
res[i + 1] = a[i] + 10
else:
res[i + 1] = res[i]
print(res[1:])

最有效的方法是什么?

最佳答案

这是一种在索引上使用 diff 来获取 block 大小,然后在值上重复来创建 block 的方法。

def fill(a,ind,f=lambda x:x+10,default=-50):
sizes = np.diff(ind,prepend=0,append=len(a))
values = np.concatenate([[default],f(a[ind])])
return values.repeat(sizes)

关于python - 填充指定索引之间的向量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com