166

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

> 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”一样工作的函数?(我知道您可以像二维数组一样索引一维数组,但这不是我拥有的代码中的选项 - 我需要进行这种转换。)

4

10 回答 10

238

你想要reshape的数组。

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

其中-1从输入数组的大小推断新维度的大小。

于 2012-09-25T02:27:24.127 回答
52

你有两个选择:

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

    a.shape = (a.size//ncols, ncols)
    

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

  • 您可以使用该函数获得一个新数组,该数组的np.reshape工作原理与上面介绍的版本大致相同

    new = np.reshape(a, (-1, ncols))
    

    如果可能,new将只是初始数组的视图a,这意味着数据是共享的。但是,在某些情况下,newarray 将改为 acopy。请注意,np.reshape它还接受一个可选关键字order,可让您从 C 行优先顺序切换到 Fortran 列优先顺序。np.reshapea.reshape方法的函数版本。

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

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
于 2012-09-25T08:03:46.123 回答
12

尝试类似:

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

您需要确保可以除以数组中的元素数ncolsB您还可以使用order关键字来调整数字的排列顺序。

于 2012-09-25T04:19:41.417 回答
10

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

X = np.reshape(X,(1, X.size))
于 2020-01-14T18:09:56.600 回答
5

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

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

b=a[:,np.newaxis]--it will convert it to two dimension.
于 2021-01-10T04:38:15.383 回答
2

还有一个简单的方法,我们可以用不同的方式使用 reshape 函数:

A_reshape = A.reshape(No_of_rows, No_of_columns)
于 2021-01-07T03:07:55.563 回答
0

您可以flatten()从 numpy 包中使用。

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]
于 2019-03-20T16:19:53.247 回答
0
some_array.shape = (1,)+some_array.shape

或者买一个新的

another_array = numpy.reshape(some_array, (1,)+some_array.shape)

这将使尺寸+1,等于在最外面添加一个括号

于 2020-04-18T02:27:20.460 回答
-1
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)
于 2019-11-25T14:38:30.790 回答
-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)
于 2019-09-06T10:37:43.977 回答