将多个数组转换为一个矩阵

2024-06-02 06:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将多个数组转换为一个矩阵。一个数组必须变成一列我使用np.column\u堆栈,但dos不适合我

[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 1]

对此

[1 1 1 1 1 1
 0 0 0 0 0 0
 0 0 0 0 0 0 
 . . . . . .
 . . . . . .
 . . . . . .
 0 0 0 0 0 0
 0 0 0 0 0 0 
 1 1 1 1 1 1 ]

Tags: 堆栈npcolumn矩阵数组dos
3条回答

因此,您有一个数组列表:

In [3]: alist = [np.array([1,0,0,1]) for i in range(3)]                                          
In [4]: alist                                                                                    
Out[4]: [array([1, 0, 0, 1]), array([1, 0, 0, 1]), array([1, 0, 0, 1])]

将它们合并为二维阵列的行:

In [5]: np.vstack(alist)                                                                         
Out[5]: 
array([[1, 0, 0, 1],
       [1, 0, 0, 1],
       [1, 0, 0, 1]])

要成为列,请执行以下操作:

In [6]: np.column_stack(alist)                                                                   
Out[6]: 
array([[1, 1, 1],
       [0, 0, 0],
       [0, 0, 0],
       [1, 1, 1]])

您的注释代码不清楚,但:

for i in range(6): 
     np.column_stack((arrays[i]))

没有意义,也没有遵循column_stack文档column_stack生成一个新数组;它没有在适当的地方运行。列表append在原地运行,在迭代构建列表时是一个不错的选择,但不应将其作为迭代构建数组的模型

所有concatenatestack函数都将数组列表作为输入。好好利用这一点。记住,每次调用都会返回一个新数组。(这同样适用于np.append,但我不鼓励使用它)

stack系列中的另一个选项:

In [7]: np.stack(alist, axis=1)                                                                  
Out[7]: 
array([[1, 1, 1],
       [0, 0, 0],
       [0, 0, 0],
       [1, 1, 1]])

我将把所有数组放在一个列表中,然后重新调整它的形状

import numpy as np
l=[[1,1,1,0,1,1],[1,0,0,1,0,1]]
l=np.reshape(l,len(l)*len(l[0]),1)

由于您需要的基本上是一维数组的垂直堆叠,因此使用np.vstack然后使用.T转置结果是有意义的:

my_array = np.array([1,0,0,0,0,0,1])
result = np.vstack([my_array] * 6).T

在这里,我假设您只复制1D数组6次,但是您也可以将1D数组列表作为参数传递给np.vstack

相关问题 更多 >