将一维数组转换为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索引一维数组,但这不是在我有代码的选项 – 我需要进行此转换)
你想reshape
arrays。
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
。