Python Numpy追加数组而不展平

Vic*_*ola 9 python arrays numpy append flatten

在 Python 3 中,我在循环中导入多个数据文件,我希望能够将所有数据存储在一个二维数组中。我从类似的东西开始,data = np.array([])在每次迭代中我想添加一个新数组datai = np.array([1,2,3]),我怎样才能让我的最终数组看起来像这样?[[1,2,3],[1,2,3],...,[1,2,3]]

我已经尝试过 np.append、np.concatenate 和 np.stack,但似乎都不起作用。我正在尝试的示例代码:

data = np.array([])
for i in range(datalen):
    datai = *func to load data as array*
    data = np.append(data, datai)
Run Code Online (Sandbox Code Playgroud)

但当然这会返回一个扁平的数组。有什么办法可以得到一个二维长度数组,datalen每个元素都是数组datai

谢谢!

jus*_*gel 5

最快的方法是 vstack

data = np.vstack((get_data() for i in range(datalen)))
Run Code Online (Sandbox Code Playgroud)

vstack 需要一个元组/可迭代

data = np.vstack((data1, data2, data3))
Run Code Online (Sandbox Code Playgroud)

或者您可以通过附加 axis=0 来完成此操作

data = np.empty(shape=(0, 3))
data = np.append(data, datai.reshape((-1, 3)), axis=0)  # -1 will make the rows automatic
Run Code Online (Sandbox Code Playgroud)


She*_*ore 0

使用列表推导式的解决方案 1:

data = []
datalen = 4
datai = range(1,4)
data = [list(datai) for _ in range(datalen)]
print (data)
Run Code Online (Sandbox Code Playgroud)

输出

[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

解决方案2(有点长)

data = []
datalen = 4

for i in range(datalen):
    datai = range(1,4)
    data.append(list(datai))
print (data)  
Run Code Online (Sandbox Code Playgroud)

与上面相同的输出。在第二种方法中,您也可以简单地使用data.append(list(range(1,4))). 您可以选择是否要转换datai为列表。如果你想要最终输出为数组,你可以使用np.array()