如何将数组列表分成子数组?

时间:2019-02-16 13:05:47

标签: python-3.x list numpy

我有一个带有以下元素值的列表“ a”。在我的代码中,我创建了一个列表:

a=[]
b=np.zeros(3)
c=[]
for i in range(0,4):
    b[0]=i+1
    b[1]=i+2
    b[2]=i+3
    c.append(deepcopy(b))
a.append(c)
c=[]
print(a)

输出:

[[array([1., 2., 3.]), array([2., 3., 4.]), array([3., 4., 5.]), array([4., 5., 6.])]]

上面的列表是我输入数据的示例

我试图制作数组

b=np.array(a)

array([[[1., 2., 3.],
    [2., 3., 4.],
    [3., 4., 5.],
    [4., 5., 6.]]])
b.shape
(1,4,3)

但是我想使形状为(4,1,3)的b给出以下输出: 这样,当我访问

b[0] gives [1,2,3]
b[1] gives [2,3,4]
b[2] gives [3,4,5]
b[3] gives [4,5,6]

3 个答案:

答案 0 :(得分:3)

有一个内置函数: b = np.vstack(a)

已编辑

使用np.vstack(a)

之后
b=b.reshape(4,3,1)

这将提供所需的结果

b[0]- > [1,2,3]

答案 1 :(得分:1)

也许我遗漏了一些东西,但是您应该能够得到如下结果:

b = np.array(a[0])

print(b[0]) # [1. 2. 3.]
print(b[1]) # [2. 3. 4.]
print(b[2]) # [3. 4. 5.]
print(b[3]) # [4. 5. 6.]


要保留3D数组:

np.array([a[0]]).reshape(4,1,3)

print(b[0]) #=> [[1. 2. 3.]]
print(b[1]) #=> [[2. 3. 4.]]
print(b[2]) #=> [[3. 4. 5.]]
print(b[3]) #=> [[4. 5. 6.]]

答案 2 :(得分:1)

编辑: 使用@orli答案更容易输入!

使用基本的Python 3。

import numpy as np
from copy import deepcopy
a=[]
b=np.zeros(3)
c=[]
for i in range(0,4):
    b[0]=i+1
    b[1]=i+2
    b[2]=i+3
    c.append(deepcopy(b))
a.append(c)
res = []
for r in a:
    for c in r:
        rw = []
        for e in c.tolist():
            rw.append(e)
        res.append(rw)
print(res)

收益:

[[1.0, 2.0, 3.0], [2.0, 3.0, 4.0], [3.0, 4.0, 5.0], [4.0, 5.0, 6.0]]