numpy:尝试在数组的一个切片的一个切片上设置值

时间:2019-02-23 00:22:08

标签: python arrays numpy indexing

我一直在尝试执行以下操作:

给出一个数组,选择第一组索引。然后选择另一组索引,并将数组的值更改为其他值。

示例代码:

r = np.random.randn(15)
ind_a = [0, 2, 3, 6, 8, 9, 10, 12, 14]
ind_b = [0, 4, 5]
r[ind_a][ind_b] = 1

我希望能够将第一组索引的第0,第4和第5索引设置为1。因此,这将是原始数组的第0,第8和第9索引为1.。

但是我正在使用的代码无法正常工作。还有其他方法可以做到这一点吗?我花了几个小时来研究布尔掩码和花式索引方面的内容,试图规避该问题,但似乎无法弄清楚。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您的问题的措词使我有些困惑,但是让我看看是否有帮助。

问题:以ind_b中的数字作为ind_a的索引。使用ind_a中选择的数字作为应设置为1的r的索引。

答案: 使用for循环,如下所示:

for i in ind_b:
    j = ind_a[i]
    r[j] = 1

这将更改r如下:

>>> r
[1, 1, 2, 3, 4, 5, 6, 7, 1, 1, 10, 11, 12, 13, 14]

答案 1 :(得分:1)

您需要先对ind_a进行切片:

r[np.array(ind_a)[ind_b]] = 1
print(r)
array([1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0.])