numpy 在Python中追加数组列表

zmeyuzjn  于 2022-12-13  发布在  Python
关注(0)|答案(4)|浏览(203)

我有一个列表A,包含多个不同形状的数组。我想把这些数组追加到一个包含多个列表的数组中。但是出现了一个错误。我也显示了预期的输出。

import numpy as np
arB=[]

A=[np.array([[ 42,  63],
[ 84,  95],
[118, 129],
[129, 140],
[140, 151],
[185, 196],
[196, 207],
[208, 219]]),np.array([[ 21,  42],
[ 63,  84],
[ 95, 106],
[106, 117],
[117, 118],
[207, 208]])]

for i in range(0,len(A)):
    for j in range(0,len(A[i])):
        for k in range(0,2):
            B=A[i,j,k]
            arB.append(B)
            B=np.array(arB)
print([B])

错误为

in <module>
    B=A[i,j,k]

TypeError: list indices must be integers or slices, not tuple

预期输出为

array([[42,  63, 84,  95, 118, 129, 129, 140, 140, 151, 185, 196, 196, 207, 208, 219],
[[ 21,  42, 63,  84, 95, 106,106, 117, 117, 118, 207, 208]])
gfttwv5a

gfttwv5a1#

A是一个列表

[array([[ 42,  63],
       [ 84,  95],
       [118, 129],
       [129, 140],
       [140, 151],
       [185, 196],
       [196, 207],
       [208, 219]]), array([[ 21,  42],
       [ 63,  84],
       [ 95, 106],
       [106, 117],
       [117, 118],
       [207, 208]])]

不能在索引中同时分配三个值
A[i,j,k]
这就是为什么会出现错误:
TypeError: list indices must be integers or slices, not tuple

5us2dqdw

5us2dqdw2#

代码:-

import numpy as np
arB=[]
A=[np.array([[ 42,  63],
[ 84,  95],
[118, 129],
[129, 140],
[140, 151],
[185, 196],
[196, 207],
[208, 219]]),np.array([[ 21,  42],
[ 63,  84],
[ 95, 106],
[106, 117],
[117, 118],
[207, 208]])]
for i in range(0,len(A)):
    temp=[]
    for j in range(0,len(A[i])):
        for k in range(0,2):
            B=A[i][j][k]
            temp.append(B)
    arB.append(temp)
print(type(arB))
print(arB)

这将给予输出:-

<class 'list'>
[[42, 63, 84, 95, 118, 129, 129, 140, 140, 151, 185, 196, 196, 207, 208, 219], [21, 42, 63, 84, 95, 106, 106, 117, 117, 118, 207, 208]]
Convert this list form into an array..!
rdlzhqv9

rdlzhqv93#

您可以使用列表解析:

B = [a.reshape(-1).tolist() for a in A]

如果你真的需要一个列表数组,你必须创建一个指定dtype=object的数组,因为每个列表的大小都不一样:

B = np.array([a.reshape(-1).tolist() for a in A], dtype=object)
klr1opcd

klr1opcd4#

只需对列表中的每个数组应用hstack(或等效的np.concatenate):

In [397]: A1 = [np.hstack(i) for i in A]

In [398]: A1
Out[398]: 
[array([ 42,  63,  84,  95, 118, 129, 129, 140, 140, 151, 185, 196, 196,
        207, 208, 219]),
 array([ 21,  42,  63,  84,  95, 106, 106, 117, 117, 118, 207, 208])]

你可以添加np.array(A1, dtype=object),但为什么要这么麻烦呢?你从一个列表开始,为什么不坚持下去呢?

相关问题