以 numpy 格式将一维数组转换为二维数组

我想通过指定2D 数组中的列数将一维数组转换为二维数组。就像这样:

> 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”的函数?(我知道你可以像索引2D 数组一样索引一个1D 数组,但是我的代码中没有这个选项——我需要进行这个转换。)

499025 次浏览

你想要 reshape数组。

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

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

试试这样:

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

但是,您需要确保可以用 ncols除数组中的元素数。您还可以使用 order关键字处理数字被拉入 B的顺序。

你有两个选择:

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

    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数组将改为 accopy。请注意,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)

可以从 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]

不使用 Numpy 将1D 数组改为2D 数组。

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)
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)

如果你的唯一目的是将一个1d 数组 X 转换成一个2d 数组,那么就这样做:

X = np.reshape(X,(1, X.size))
some_array.shape = (1,)+some_array.shape

或者换个新的

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

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

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

A_reshape = A.reshape(No_of_rows, No_of_columns)

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

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


b=a[:,np.newaxis]--it will convert it to two dimension.