【问题标题】:Numpy: Trying to set value on a slice of a slice of an arrayNumpy:尝试在数组切片的切片上设置值
【发布时间】:2019-02-23 00:22:08
【问题描述】:

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

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

示例代码:

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。

但我使用的代码不起作用。还有其他方法可以完成这项工作吗?我花了几个小时研究布尔掩码和花哨的索引试图规避这个问题,但似乎无法弄清楚。

非常感谢!

【问题讨论】:

  • r[ind_a] 是一个带有复制值的新数组。 [ind_b]=1 正在修改该副本,而不是原始 r。您需要一个结合了两者选择的单一索引。
  • 我是这么认为的,但是在这种情况下我无法弄清楚如何做到这一点
  • ind_a转换为数组,然后使用r[ind_a[ind_b]]

标签: python arrays numpy indexing


【解决方案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.])

【讨论】:

    【解决方案2】:

    我对你问题的措辞有点困惑,但让我看看这是否有帮助。

    问题:取 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2020-12-11
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      相关资源
      最近更新 更多