【发布时间】:2019-09-16 23:25:59
【问题描述】:
从一个向量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:])
最有效的方法是什么?
【问题讨论】:
-
感谢您的编辑。
-
2 年后:不客气。经过这么多年,我终于想出了如何修复我的答案并取消删除它。
标签: python arrays numpy numpy-ndarray