【问题标题】:How to turn a numpy vector into a matrix, where each column in the matrix contains a range around the respective element in the initial vector?如何将 numpy 向量转换为矩阵,其中矩阵中的每一列都包含初始向量中各个元素周围的范围?
【发布时间】:2020-11-26 21:53:23
【问题描述】:

假设我有一个 numpy 向量数组:

array([1, 2, 3])

我想将此向量转换为一个矩阵,其中每列在初始向量中的相应元素周围取 +/- 2 的范围,这样我的输出矩阵是:

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

最好的(最好是矢量化的)方法是什么?

【问题讨论】:

标签: python numpy numpy-ndarray


【解决方案1】:

您可以使用以下单线:

result = a + np.array([-1, 0, 1])[:, np.newaxis]

(我认为,一个更优雅的解决方案)。

结果是:

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

编辑

如果范围取决于某个参数,比如 rng,你可以这样做:

rng = 2   # From x-2 to x+2
result = a + np.arange(-rng, rng + 1)[:, np.newaxis]

得到:

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

【讨论】:

  • 谢谢,但我意识到我现在想解决一个更普遍的问题(我已经编辑了这个问题来解释这一点):基本上,输出矩阵应该作为函数动态增长范围围绕初始向量
  • 太棒了,谢谢!我想将来当我编辑一个问题时,我应该保持原样并将编辑添加到底部?
猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
相关资源
最近更新 更多