【发布时间】:2015-03-28 03:09:58
【问题描述】:
我有一个 numpy 数组 A,我想使用索引列表 B 修改其中的值。但问题是在我的切片中,我可以多次拥有数组的元素... 这个例子将更好地解释我的意思:
import numpy as np
A = np.arange(5) + 0.5
B = np.array([0, 1, 0, 2, 0, 3, 0, 4])
print A[B]
按预期返回[ 0.5 1.5 0.5 2.5 0.5 3.5 0.5 4.5]。
但是,如果我这样做:
A[B] += 1.
print A
我期望获得[ 4.5 2.5 3.5 4.5 5.5],因为第一个元素在索引向量B 中重复了4 次,但它返回[ 1.5 2.5 3.5 4.5 5.5]。
那么我该如何做我真正想做的事情呢? (不使用任何循环,因为我在非常大的数组上使用它)
【问题讨论】:
-
不明白。您的预期结果是
[ 4.5 2.5 3.5 4.5],它只有 4 个元素,而 B 中有 5 个索引。为什么缺少一个元素? -
我在简单的 A(即非随机)上运行您的示例以获得一些可重复的结果:pastebin.com/mm2CcmK7 对我来说,如果我理解正确的话,它似乎工作正常。
-
@Marcin A 在我的情况下不是随机的......它是 arange(5) + 0.5 但无论如何它在您的示例中的工作方式相同,我希望得到
[15 23 34 45 56]而不是[12 23 34 45 56]A 的第一个元素在索引列表 B 中重复 4 次,它应该提交 4 次到 +1 操作......至少这就是我最终想要做的。知道怎么做吗? -
嗯,好的。现在我明白你的意思了。比检查杰米的回答。它似乎解决了这个问题。
标签: python numpy indexing slice