在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)
但是当然,这将返回一个展平的数组。我有什么办法可以找回长度为datalen
的二维数组,而每个元素都是数组datai
?
谢谢!
答案 0 :(得分:2)
最快的方法是vstack
data = np.vstack((get_data() for i in range(datalen)))
vstack需要一个元组/可迭代
data = np.vstack((data1, data2, data3))
或者您可以通过添加axis = 0来做到这一点
data = np.empty(shape=(0, 3))
data = np.append(data, datai.reshape((-1, 3)), axis=0) # -1 will make the rows automatic
答案 1 :(得分:0)
使用列表推导的解决方案1:
data = []
datalen = 4
datai = range(1,4)
data = [list(datai) for _ in range(datalen)]
print (data)
输出
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
解决方案2(有点长)
data = []
datalen = 4
for i in range(datalen):
datai = range(1,4)
data.append(list(datai))
print (data)
具有与上述相同的输出。在第二种方法中,您也可以只使用data.append(list(range(1,4)))
。您可以选择是否要将datai
转换为列表。如果要将最终输出作为数组,则可以使用np.array()
答案 2 :(得分:0)
您可以试试这个-
data = np.zeros(shape=(datalen,len(datai))
for i in range(datalen):
data[i] = datai
答案 3 :(得分:0)
它叫SELECT CONVERT(date, dbo.f_SplitString(body,1,'|'), 105) FROM t_Quick
SELECT CONVERT(date, dbo.f_SplitString(body,1,'|'), 105), 23)) FROM t_Quick
SELECT CONVERT(date, dbo.f_SplitString(body,1,'|'), 105), 23)) + dbo.f_SplitString(body,2,'|') FROM t_Quick
。
摘自官方文档:
numpy.tile
所以,为您的>>> c = np.array([1,2,3,4])
>>> np.tile(c,(3,1))
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
做datai
答案 4 :(得分:0)
你可以像这样使用 np.reshape 重塑你的数组
flattened_array = np.array([1,2,3,1,2,3,1,2,3])
wanted_array = np.reshape(flattened_array, (-1, 3))
这会导致
[[1, 2, 3],[1, 2, 3],[1, 2, 3]]