我希望创建一个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]]])
因为我将继续修改矩阵,因此我将为每个列表组件添加更多数字。
谢谢!
答案 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))