创建多维numpy列表数组,并按顺序为第一个元素分配一个数字

时间:2017-02-07 13:10:22

标签: python arrays numpy multidimensional-array

我希望创建一个numpy列表数组,并将每个列表中的第一个元素按顺序定义为数字。

到目前为止,我可以创建所有第一个元素的numpy数组,但它们并没有像我一样嵌套在列表中。

所以我有

 B=np.arange(1,10)
 Bnew = B.reshape((3,3))
 array([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

但我希望它看起来像:

 array([[[1], [2], [3]],
        [[4], [5], [6]],
        [[7], [8], [9]]])

因为我将继续修改矩阵,因此我将为每个列表组件添加更多数字。

谢谢!

2 个答案:

答案 0 :(得分:1)

为了能够附加到数组的单元格,您需要将其设为dtype=object。您可以使用以下稍微丑陋的黑客强制执行

a = [[i] for i in range(1, 10)]
swap = a[0]
a[0] = None # <-- this prevents the array factory from converting
            #     the innermost level of lists into an array dimension
b = np.array(a)
b[0] = swap
b.shape = 3, 3

现在你可以做例如

b[1,1].append(2)
b
array([[[1], [2], [3]],
       [[4], [5, 2], [6]],
       [[7], [8], [9]]], dtype=object)

答案 1 :(得分:0)

你想要的是一个三维的numpy数组。但是reshape((3, 3))会创建一个二维数组,因为你提供了两个维度。要创建所需的内容,您应该为重塑功能提供3D形状:

Bnew = B.reshape((3, 3, 1))