如何在Python中将3D数组转换为2D数组列表?

3

我希望将一个3D数组(比如大小为3x3x4)转换为3个3x4的数组列表。

else块中的3D数组Aif块中的类型不同。

我尝试过tolist()函数,但它将3D数组转换为列表的列表,结果并不理想。

X = np.random.randn(3, 3, 3)
for R in range(1,10):
    N = len(X.shape) 
    B = ()
    C = []

    for i in range(N):
        B += svd(X[i])
        C.append(B[3*i])
        
    C = np.array(C)
    if R <= np.shape(C)[2]:
        A = C[:,:,:R]
    else:
        A = np.concatenate((C[:,:,:np.shape(C)[2]],np.zeros((3,3,1))),axis=2)

理想情况下,A = [np.random.randn(In, R) for In in X.shape]。 但我正在修改这一步骤,将X的左奇异向量赋值给A

这感觉像是一个 XY 问题。列表能为你做什么,NumPy 做不了? - Mad Physicist
2个回答

7

一个numpy数组是可迭代的,因此您可以轻松地将其转换为列表:

lst = list(A)

演示:

>>> arr = np.arange(8).reshape(2,2,2)
>>> arr
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])
>>> list(arr)
[array([[0, 1],
       [2, 3]]), array([[4, 5],
       [6, 7]])]

1

要将3D数组转换为2D数组列表,只需使用list

X = np.random.randn(3, 3, 3)
list(X)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接