Python Numpy追加数组而不展平

时间:2018-08-03 16:08:50

标签: 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)

但是当然,这将返回一个展平的数组。我有什么办法可以找回长度为datalen的二维数组,而每个元素都是数组datai

谢谢!

5 个答案:

答案 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]]