在numpy中将1D数组转换为2D数组

2024-04-26 20:46:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过指定二维数组中的列数,将一维数组转换为二维数组。像这样工作的东西:

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])

numpy是否有一个类似于我编写的函数“vec2matrix”的函数?(我知道您可以像2D数组一样索引1D数组,但在我拥有的代码中这不是一个选项-我需要进行此转换。)


Tags: 函数代码importnumpyas选项np数组
3条回答

尝试以下方法:

B = np.reshape(A,(-1,ncols))

不过,您需要确保可以将数组中的元素数除以ncols。您还可以使用order关键字来播放将数字拉入B的顺序。

你想^{}数组。

B = np.reshape(A, (-1, 2))

其中-1根据输入数组的大小推断新维度的大小。

你有两个选择:

  • 如果不再需要原始形状,最简单的方法是将新形状指定给数组

    a.shape = (a.size//ncols, ncols)
    

    您可以通过-1切换a.size//ncols来自动计算正确的形状。确保a.shape[0]*a.shape[1]=a.size,否则会遇到一些问题。

  • 您可以使用np.reshape函数获得一个新的数组,其工作原理与上面介绍的版本基本相同

    new = np.reshape(a, (-1, ncols))
    

    如果可能的话,new将只是初始数组的视图a,这意味着数据是共享的。不过,在某些情况下,new数组将成为一个副本。请注意,np.reshape还接受一个可选关键字order,它允许您从行主C顺序切换到列主Fortran顺序。np.reshapea.reshape方法的函数版本。

如果您不能遵守要求a.shape[0]*a.shape[1]=a.size,那么您将不得不创建一个新数组。您可以使用np.resize函数并将其与np.reshape混合,例如

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)

相关问题 更多 >