【问题标题】:Subtract single value from numpy column preserving original data shape从 numpy 列中减去单个值,保留原始数据形状
【发布时间】:2021-04-21 21:27:44
【问题描述】:

我想从一个 numpy 列中减去一个给定的值。例如,给定一个二维矩阵,我想从给定列中减去任意值。

我知道这可以通过以下代码实现:

numpy_matrix[:, 0] -= my_value

基本上我从 0 列中减去 my_value

我想做的是这样的:

result = numpy_matrix[:,0] - my_value

其中result 具有numpy_matrix 的原始形状,而不是单个向量。比如numpy_matrix.shape=(4,3),用上面的代码我会得到result.shape=(4,)

我想要做的是从所选列中减去我的值,并返回一个与原始矩阵 (numpy_matrix) 具有相同形状但具有“转换”列的矩阵。

有没有办法在 numpy 中有效地做到这一点,而无需从原始 numpy_matrix 中“手动”减去然后连接剩余的列?

编辑:因为我注意到它有点不清楚,我的目标是创建一个与原始矩阵相同的新矩阵(相同的形状,相同的数据),但修改了第 i 列通过减法运算。

【问题讨论】:

    标签: python numpy matrix numpy-ndarray


    【解决方案1】:

    如果我知道您想要覆盖原始数组或创建一个大小相同但第一列减去标量的新数组,我会更好地回答您。

    覆盖原始数组,我们可以按照您提供的第一个代码块(好和短)或其他方式(相同逻辑):

    numpy_matrix[:,0]=numpy_matrix[:,0]-my_value
    

    numpy_matrix[:,0]=result
    

    如果你想创建一个新的(听起来很奇怪),但复制原始数组并编写相同的逻辑来覆盖新数组。

    【讨论】:

      【解决方案2】:

      我不确定我是否理解,你正在尝试什么,但我认为这是你想要的:

      import numpy as np
      
      def sub(mtx, col, num):
          # ret = np.ones(mtx.shape, np.float16)
          # ret[:,:] = mtx[:,:]
          ret = mtx.copy()
          ret[:,col] -= num
          return ret
      
      original = np.ones((4,6), np.float16) # change to your shape and type
      # fill with your original values here
      result = sub(original, 3, 3)
      
      print("Original:")
      print(original)
      print("Result:")
      print(result)
      

      我会创建一个形状相同的新矩阵,用原始元素填充它,然后覆盖所需的列。

      Original:
      [[1. 1. 1. 1. 1. 1.]
       [1. 1. 1. 1. 1. 1.]
       [1. 1. 1. 1. 1. 1.]
       [1. 1. 1. 1. 1. 1.]]
      Result:
      [[ 1.  1.  1. -2.  1.  1.]
       [ 1.  1.  1. -2.  1.  1.]
       [ 1.  1.  1. -2.  1.  1.]
       [ 1.  1.  1. -2.  1.  1.]]
      

      【讨论】:

      • 很好,这就是我所需要的,尽管我认为可以通过一些 numpy 方法来实现这一点,而无需“手动”复制两个矩阵(因为它们可能是内部优化的),但它仍然可以完成工作
      • 好吧,您也可以使用copy() 函数来复制它们。因此,您使用内置功能,而不是手动复制。但可能有更快/更好的方法。
      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2017-09-19
      • 2011-12-14
      • 2016-02-14
      • 2019-07-30
      相关资源
      最近更新 更多