【问题标题】:substract element to row array in python [duplicate]在python中将元素减去行数组[重复]
【发布时间】:2017-08-06 12:15:34
【问题描述】:

我有两个 numpy 数组 a 和 b

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

b = np.array([1,2,3])
array([1, 2, 3])

我想在 a 的每一行中减去 b 的对应元素(即 a 的第一行、b 的第一个元素等) 所以 c 是

array([[0, 1, 2],
       [2, 3, 4],
       [4, 5, 6]])

有没有python命令可以做到这一点?

【问题讨论】:

  • 您的问题完全由标记副本中的前两个回答回答。

标签: python numpy


【解决方案1】:

有没有python命令可以做到这一点?

是的,- 运算符。

此外,您需要将b 制作成列向量,以便广播可以为您完成剩下的工作:

a - b[:, np.newaxis]

# array([[0, 1, 2],
#        [2, 3, 4],
#        [4, 5, 6]])

【讨论】:

    【解决方案2】:

    是的!您只需要先将 b 设为列向量

    a - b[:, np.newaxis]
    

    【讨论】:

      【解决方案3】:

      b重塑为列向量,然后减去:

      a - b.reshape(3, 1)
      

      b 没有就地改变,但reshape 方法调用的结果将是列向量:

      array([[1],
             [2],
             [3]])
      

      允许你想要的减法的“形状”。更一般的重塑操作是:

      b.reshape(b.size, 1)
      

      无论b 有多少元素,并将它们塑造成一个 N x 1 向量。

      更新:快速基准测试显示 kazemakase's answer 使用 b[:, np.newaxis] 作为重塑策略,速度提高了约 7%。对于小向量,微秒的那几个额外分数无关紧要。但是对于大向量或内部循环,更喜欢他的方法。这是一种不太通用的重塑,但在此用途中表现更好。

      【讨论】:

      • 一般重塑的小附录:b.reshape(-1, 1) 让重塑自动设置一维的大小,而无需显式查询 b.shape
      • @kazemakase 好点。不确定 OP 是否已准备好接受-1 通配符,但既然您提出它,它会在不失一般性的情况下调整性能。竖起大拇指。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多