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

Ale*_*ams 93 python arrays numpy matrix multidimensional-array

我想通过指定2D数组中的列数将1维数组转换为2维数组.有点像这样的东西:

> 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]])
Run Code Online (Sandbox Code Playgroud)

numpy有没有像我的功能"vec2matrix"那样工作的功能?(我知道你可以像二维数组一样索引一维数组,但这不是我所拥有的代码中的一个选项 - 我需要进行这种转换.)

Mat*_*all 134

你想要reshape阵列.

B = np.reshape(A, (-1, 2))
Run Code Online (Sandbox Code Playgroud)

  • @GovindPrabhu -1从输入数组的大小推断出新维度的大小. (18认同)
  • -1表示什么? (10认同)

Pie*_* GM 40

您有两种选择:

  • 如果您不再需要原始形状,最简单的方法就是为数组指定一个新形状

    a.shape = (a.size//ncols, ncols)
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 您可以使用该np.reshape函数获得一个新数组,其工作方式与上面提供的版本大致相同

    new = np.reshape(a, (-1, ncols))
    
    Run Code Online (Sandbox Code Playgroud)

    在可能的情况下,new将只是初始数组的视图a,这意味着数据是共享的.但在某些情况下,new数组将是acopy而不是.请注意,np.reshape它还接受一个可选关键字order,该关键字允许您从行主要C顺序切换到列主要Fortran顺序.np.reshape是该a.reshape方法的功能版本.

如果您不能满足要求a.shape[0]*a.shape[1]=a.size,那么您将不得不创建一个新阵列.您可以使用该np.resize功能并将其与之混合使用np.reshape,例如

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
Run Code Online (Sandbox Code Playgroud)

  • 完整答案!这应该是公认的! (2认同)

Aru*_*run 9

如果您的唯一目的是将一维数组 X 转换为二维数组,请执行以下操作:

X = np.reshape(X,(1, X.size))
Run Code Online (Sandbox Code Playgroud)


小智 9

通过添加新轴将一维数组转换为二维数组。

a=np.array([10,20,30,40,50,60])

b=a[:,np.newaxis]--it will convert it to two dimension.
Run Code Online (Sandbox Code Playgroud)


Jos*_*del 5

尝试类似:

B = np.reshape(A,(-1,ncols))
Run Code Online (Sandbox Code Playgroud)

您需要确保可以将数组中的元素数除以ncols。您也可以B使用order关键字按照将数字拉入的顺序进行游戏。