【问题标题】:Create vertical NumPy arrays in Python在 Python 中创建垂直 NumPy 数组
【发布时间】:2015-06-21 21:45:00
【问题描述】:

我在 Python 中使用 NumPy 来处理数组。这是我用来创建垂直数组的方式:

import numpy as np
a = np.array([[1],[2],[3]])

有没有更简单直接的方式来创建垂直数组?

【问题讨论】:

  • 不要做from numpy import *!!!
  • 感谢您的评论。我编辑了问题。
  • 我们需要一个像 MATLAB shift+enter 这样的功能来进行编辑:D
  • 是的!就连我也一直这么认为!

标签: python arrays numpy


【解决方案1】:

您可以使用reshapevstack

>>> a=np.arange(1,4)
>>> a
array([1, 2, 3])
>>> a.reshape(3,1)
array([[1],
       [2],
       [3]])
>>> np.vstack(a)
array([[1],
       [2],
       [3]])

另外,您可以使用broadcasting 来重塑您的数组:

In [32]: a = np.arange(10)
In [33]: a
Out[33]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [34]: a[:,None]
Out[34]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

【讨论】:

  • 如果你能在你的函数中添加链接会更好
  • @BhargavRao 我正在这样做;)
【解决方案2】:

您也可以使用np.newaxis(参见示例here

>>> import numpy as np
>>> np.arange(3)[:, np.newaxis]
array([[0],
       [1],
       [2]])

附注

我刚刚意识到你已经使用了from numpy import *。不要这样做,因为 Python 通用库中的许多函数与 numpy 重叠(例如 sum)。当您从numpy 发送import * 时,您将失去这些功能的功能。因此总是使用:

import numpy as np

这也很容易输入。

【讨论】:

    【解决方案3】:

    简单和直接是旁观者的眼中。

    In [35]: a = np.array([[1],[2],[3]])
    In [36]: a.flags
    Out[36]:
      C_CONTIGUOUS : True
      F_CONTIGUOUS : False
      OWNDATA : True
      WRITEABLE : True
      ALIGNED : True
      UPDATEIFCOPY : False
    In [37]: b=np.array([1,2,3]).reshape(3,1)
    In [38]: b.flags
    Out[38]:
      C_CONTIGUOUS : True
      F_CONTIGUOUS : False
      OWNDATA : False
      WRITEABLE : True
      ALIGNED : True
      UPDATEIFCOPY : False
    

    第一个更短并且拥有它的数据。所以从某种意义上说,额外的括号是一种痛苦,但它是一个相当主观的问题。

    或者,如果您想要更像 MATLAB 的东西,您可以使用 np.matrix 字符串格式:

    c=np.array(np.matrix('1;2;3'))
    c=np.mat('1;2;3').A
    

    但我通常不担心 OWNDATA 标志。我最喜欢的示例数组之一是:

    np.arange(12).reshape(3,4)
    

    其他方式:

    np.atleast_2d([1,2,3]).T
    np.array([1,2,3],ndmin=2).T
    a=np.empty((3,1),int);a[:,0]=[1,2,3] # OWNDATA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-12
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 2014-04-19
      • 1970-01-01
      相关资源
      最近更新 更多