【问题标题】:How do you create a numpy vertical arange?你如何创建一个 numpy 垂直范围?
【发布时间】:2013-08-10 15:58:29
【问题描述】:
>>> print np.array([np.arange(10)]).transpose()

[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]]

有没有一种无需经过这些额外步骤即可获得垂直范围的方法?

【问题讨论】:

  • 你已经在那里做了一些不必要的步骤 - np.array()[] 是不必要的,因为 np.arange 返回一个 numpy 数组。你可以做np.arange(10).transpose()
  • 一维数组的 @Brionius, transpose 不执行任何操作。 OP 正在使用[] 向数组添加一个额外的维度,并询问是否有更有效的方法来实现相同的结果。
  • @BiRico 啊,你是对的,我的错。
  • “你已经在那里做了一些不必要的步骤”——我想,这就是我问的原因。
  • @BiRico 是否有其他方法可以向数组添加维度?出于某种原因,我的np.array 实际上并没有工作......我知道为什么。

标签: python arrays numpy


【解决方案1】:

你可以使用np.newaxis:

>>> np.arange(10)[:, np.newaxis]
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

np.newaxis 只是None 的别名,由numpy 开发人员添加,主要是为了便于阅读。因此np.arange(10)[:, None] 将产生与上述解决方案完全相同的结果。

编辑:

另一种选择是:

np.expand_dims(np.arange(10), axis=1)

numpy.expand_dims

【讨论】:

  • @JasonS,我添加了一个带有示例的链接。
  • @JasonS - 看看:docs.scipy.org/doc/numpy/reference/… 文档相当简洁,因此请参阅指南或书籍之一(如 Akavall 链接到的)以获取更多示例。
  • @JasonS 我也不知道...我just posted a question为此...
  • @SaulloCastro,好问题,所以我猜np.newaxis 之所以被引入只是因为它更易于阅读。
【解决方案2】:

我愿意:

np.arange(10).reshape((10, 1))

与 np.array 不同,reshape 是一种轻量级操作,不会复制数组中的数据。

【讨论】:

  • 附带说明,您也可以使用whatever.reshape(-1, 1),以避免指定第一个维度的大小。
猜你喜欢
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多