【问题标题】:Modify the elements of a Numpy 2D- array at specific locations without for loop在没有 for 循环的情况下修改特定位置的 Numpy 二维数组的元素
【发布时间】:2019-08-20 15:43:25
【问题描述】:

我有一个 Numpy 二维数组 a 和一个索引列表 list_indices。我想在list_indices 中指定的每个索引处修改数组a 的元素。

我目前使用的方法是使用 for 循环。例如,如果我想更改这些元素的符号:

for index in list_indices:
     a[index[0],index[1]] = -np.sign(a[index[0],index[1]])

我想知道这是否可以在没有 for 循环的情况下有效地完成。

【问题讨论】:

  • 给我们一个样品。有没有重复的?
  • 你知道如何“转置”一个列表吗? list(zip(*list_indices)?这应该给你两个元组,你可以用它们来索引a的所有选定点。

标签: python arrays numpy numpy-ndarray


【解决方案1】:

您需要更改list_indices 的格式。正如您在 cmets 中提到的,list_indices 可能是 [[0,0],[1,1],[2,2]]。如果您改为将其更改为 [[0,1,2],[0,1,2]](第一个轴的第一个索引,然后是第二个),那么这将起作用:

a[list_indices] *= -1

或者例如平方:

a[list_indices] = a[list_indices]**2

【讨论】:

  • 如果我尝试这个,我会收到 IndexError: too many indices for array 的错误。
  • 你的数组形状和索引列表到底是什么?如果您尝试访问数组形状之外的索引,这听起来像是一个错误。
  • 我的数组 a 是一个 2D Numpy 数组。 list_indices 是一个列表,其中每个元素都是一个索引。例如,list_indices=[[0,0], [1,1], [2,2]] 如果a3*3 数组。
【解决方案2】:

如果我将数组定义为 numpy 数组然后使用 numpy 拼接,这对我有用:

a = np.zeros((6,6))
b = [[1,2],[1,3],[2,2],[2,3]]
b = np.array(b)
a[b[:,0],b[:,1]] +=2 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2021-01-29
    • 2023-03-25
    • 2022-01-12
    • 2021-05-13
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多