【问题标题】:Transpose a 1-dimensional array in Numpy without casting to matrix在 Numpy 中转置一维数组而不转换为矩阵
【发布时间】:2019-04-17 15:25:01
【问题描述】:

我的目标是将行向量转换为列向量,反之亦然。 numpy.ndarray.transpose 的文档说:

对于一维数组,这不起作用。 (要在列向量和行向量之间切换,首先将一维数组转换为矩阵对象。)

但是,当我尝试这个时:

my_array = np.array([1,2,3])
my_array_T = np.transpose(np.matrix(myArray))

我确实得到了想要的结果,尽管是矩阵形式 (matrix([[66],[640],[44]])),但我也得到了这个警告:

PendingDeprecationWarning:矩阵子类不是表示矩阵或处理线性代数的推荐方法(请参阅https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html)。请调整您的代码以使用常规 ndarray。

my_array_T = np.transpose(np.matrix(my_array))

那么我该如何正确转置ndarray

【问题讨论】:

  • 看起来应该删除文档字符串中的建议或更改为不建议使用numpy.matrix

标签: python arrays numpy matrix transpose


【解决方案1】:

如果您的数组是my_array,并且您想将其转换为列向量,您可以这样做:

my_array.reshape(-1, 1)

对于行向量,您可以使用

my_array.reshape(1, -1)

这两个也可以转置,并且可以按预期工作。

【讨论】:

    【解决方案2】:

    一维数组本身是一次转置,这与 Matlab 中的一维数组不存在并且至少是二维的相反。

    你想要的是重塑它:

    my_array.reshape(-1, 1)
    

    或者:

    my_array.reshape(1, -1)
    

    取决于你想要什么样的向量(列向量或行向量)。

    -1 类似于广播,使用所有可能的元素,1 创建第二个必需的维度。

    【讨论】:

    • my_array[:, None] 也会进行所需的整形。
    • 同意,这也是重塑的一种方式。
    【解决方案3】:

    IIUC,使用reshape

    my_array.reshape(my_array.size, -1)
    

    【讨论】:

    • 这里有一个额外的hing,你的意思可能是(-1, 1),这个例子中的-1实际上是一个1。
    • @MatthieuBrucher 1-1 都可以 ;)
    • 是的,除了-1做额外的计算,最简单的是(-1, 1)。
    • @MatthieuBrucher 时差真的很可以忽略不计,但仍然公平;)
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2018-11-20
    • 2016-02-02
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多