将一维数组转换为numpy的二维数组

我想通过指定matrix中的列数将一维数组转换为matrix。 有些东西可以这样工作:

> 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], [7, 8]]) 

numpy是否具有像我制作的函数“vec2matrix”一样的function? (据我所知,你可以像一个matrix索引一维数组,但这不是在我有代码的选项 – 我需要进行此转换)

你想reshapearrays。

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

你有两个select:

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

     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数组会变成acopy。 请注意, np.reshape还接受可选的关键字order ,使您可以从行主C顺序切换到列主要Fortran顺序。 np.reshapea.reshape方法的函数版本。

如果你不能满足a.shape[0]*a.shape[1]=a.size这个要求,你就不得不创build一个新的数组。 您可以使用np.resize函数并将其与np.reshape混合,如

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

尝试像这样:

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

你需要确保你可以通过ncols分割数组中的元素数量。 您也可以使用order关键字来玩数字的order