我想通过指定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]])
numpy有没有像我的假装功能“vec2matrix”那样工作的功能? (我知道你可以像二维数组一样索引一维数组,但这不是我所拥有的代码中的一个选项 - 我需要进行这种转换。)
答案 0 :(得分:113)
您想要reshape
数组。
B = np.reshape(A, (-1, 2))
答案 1 :(得分:34)
您有两种选择:
如果您不再需要原始形状,最简单的方法就是为数组指定一个新形状
a.shape = (a.size//ncols, ncols)
您可以将a.size//ncols
切换为-1
以自动计算正确的形状。确保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
的要求,你就不得不创建一个新阵列。您可以使用np.resize
功能并将其与np.reshape
混合使用,例如
>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
答案 2 :(得分:4)
尝试类似:
B = np.reshape(A,(-1,ncols))
您需要确保可以将数组中的元素数除以ncols
。您还可以使用B
关键字将数字加入order
的顺序进行播放。
答案 3 :(得分:4)
如果您的唯一目的是将一维数组X转换为二维数组,请执行以下操作:
X = np.reshape(X,(1, X.size))
答案 4 :(得分:1)
还有一个简单的方法,我们可以以不同的方式使用 reshape 函数:
A_reshape = A.reshape(No_of_rows, No_of_columns)
答案 5 :(得分:0)
import numpy as np
array = np.arange(8)
print("Original array : \n", array)
array = np.arange(8).reshape(2, 4)
print("New array : \n", array)
答案 6 :(得分:0)
some_array.shape = (1,)+some_array.shape
或获得一个新的
another_array = numpy.reshape(some_array, (1,)+some_array.shape)
这将使尺寸+1,等于在最外层添加一个括号
答案 7 :(得分:0)
通过添加新轴将一维数组转换为二维数组。
a=np.array([10,20,30,40,50,60])
b=a[:,np.newaxis]--it will convert it to two dimension.
答案 8 :(得分:-1)
您可以从numpy包中使用flatten()
。
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")
输出:
original array: [[1 2]
[3 4]
[5 6]]
flattened array = [1 2 3 4 5 6]
答案 9 :(得分:-2)
不使用Numpy将一维数组更改为二维数组。
l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part
while end <= len(l):
temp = []
for i in range(start, end):
temp.append(l[i])
new.append(temp)
start += part
end += part
print("new values: ", new)
# for uneven cases
temp = []
while start < len(l):
temp.append(l[start])
start += 1
new.append(temp)
print("new values for uneven cases: ", new)