【问题标题】:Swapping two integers in numpy array leads to IndexError在 numpy 数组中交换两个整数会导致 IndexError
【发布时间】:2019-06-11 09:11:18
【问题描述】:

我第一次尝试Swap two values in a numpy array.

但是这个看似简单的问题会导致索引错误或不正确的结果,所以我一定是做错了什么......但是什么?

import numpy as np

# Swap 1 and 3, leave the 0s alone!
i = np.array([1, 0, 1, 0, 0, 3, 0, 3])

# Swaps incorrectly
i[i==1], i[i==3] = 3, 1

# IndexError
i[i==1, i==3] = i[i==3, i==1]

# IndexError
i[[i==1, i==3]] = i[[i==3, i==1]]

# IndexError
ix1 = np.argwhere(i==1)
ix3 = np.argwhere(i==3)
i[[ix1, ix3]] = i[[ix3, ix1]]

# Swaps incorrectly
i[np.argwhere(i==1)], i[np.argwhere(i==3)] = 3, 1

【问题讨论】:

  • 尝试 np.where 定位给定值的索引:i[np.where(i==1)] = some_value

标签: python numpy


【解决方案1】:
>>> import numpy as np
>>> i = np.array([1, 0, 1, 0, 0, 3, 0, 3])
>>> i
array([1, 0, 1, 0, 0, 3, 0, 3])
>>> a, b = i ==3, i == 1  # save the indices
>>> i[a], i[b] = 1, 3
>>> i
array([3, 0, 3, 0, 0, 1, 0, 1])

【讨论】:

  • 我不知道你可以保存这样的索引。看起来有点复杂,但有效!
【解决方案2】:

您使用元组交换来交换您的值。对于 numpy 数组,这不是最安全的方法。 您的问题的答案已经发布。

https://stackoverflow.com/a/14933939/11459926

【讨论】:

  • 感谢您指出我的错在哪里。您可能想要编辑最后一行中的歧义,因为这是我得到但不是我希望得到
猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 2020-08-08
  • 2011-07-17
  • 1970-01-01
  • 2015-04-15
  • 2019-06-01
  • 1970-01-01
  • 2021-08-10
相关资源
最近更新 更多