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?
谢谢!
最快的方法是 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)
使用列表推导式的解决方案 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()
| 归档时间: |
|
| 查看次数: |
4908 次 |
| 最近记录: |