将一维数组转换为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.reshape是a.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 。