【问题标题】:Python fast way to substitute specific values in array [duplicate]Python快速替换数组中特定值的方法[重复]
【发布时间】:2016-08-02 17:30:35
【问题描述】:

假设我有两个 numpy 数组

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([2,7,6])

我想获得

c = np.array([[1,0,3],[4,5,0][0,8,9]])

也就是说,我想用值0 替换数组a 中其值包含在序列b 中的所有元素。 最快最干净的方法是什么? (有没有类似substitute(a,b,0)

【问题讨论】:

  • 我没试过。我想到的唯一方法就是循环。我想知道是否有一种矢量化的方式来做到这一点。 np.select, np.choice, np.place ...据我所知都是基于条件或掩码的。

标签: python arrays numpy filter substitution


【解决方案1】:

替代答案:

c = a.copy()
c[np.in1d(a.ravel(), b).reshape(a.shape)] = 0

np.in1d 有点像“in”运算符的矢量化版本,但它仅适用于一维数组。 (因此是 ravel 和 reshape 操作。)

【讨论】:

    【解决方案2】:
    c = a.copy()
    for num in b:
        c[c == num] = 0
    

    【讨论】:

    • c[c == num] 处理事情的好方法....
    • 这是怎么混淆的? c 的值等于num 需要设置为零,其中num 采用b 中的每个值。
    • @DanielSanchez numpy 数组支持丰富的索引,例如 boolean indexing。这是一种惯用的模式。
    • 很有趣,但对我来说还是太离谱了,无论如何我删除了反对票,抱歉。
    猜你喜欢
    • 2011-03-25
    • 2013-04-20
    • 2021-01-28
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2020-01-16
    • 2016-02-13
    相关资源
    最近更新 更多