附加具有不同第一维度的numpy数组

2024-04-19 09:56:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序在for循环中创建一个numpy数组。例如,它创建的数组的形状是(100*30*10),然后是(160*30*10),然后可能是(120*30*10)。我必须将上述内容附加到一个空的numpy数组中,以便在循环结束时,它将是一个具有(380*30*10)形状(即100+160+120之和)的numpy数组。numpy数组中的第二维度和第三维度不变

如何在python中执行上述操作。我尝试了以下方法

np_model = np.append(np_model,np_temp1)
print("Appended model shape is",np_model.shape)
np_label = np.append(np_label,np_temp2)
print("Appended label shape is",np_label.shape)

np_model是一个空数组,我将它定义为np_model = np.empty(1,30,10),将np_标签定义为np_label = np.empty(1 ,str)

np_temp1对应于每个for循环中的数组,如100*30*10120*30*10等,np_temp2是带有“item1”、“item2”等的字符串

np_label是一个字符串numpy数组,其中1个标签对应于np_temp1.shape[0]。但是我在np_模型中得到的结果是大小为380*30*10=1140000的扁平数组

感谢您的帮助


Tags: numpyformodel定义isnp数组label
3条回答

您可以使用numpyconcatenate函数,将输出numpy附加到列表,然后将其馈送到concatenate函数:

empty_list = []
x = np.zeros([10, 20, 4])
y = np.zeros([12, 20, 4])
empty_list.append(x)
empty_list.append(y)
z = np.concatenate(empty_list, axis=0)
print(x.shape, y.shape, z.shape)

(10, 20, 4) (12, 20, 4) (22, 20, 4)

为了具体回答您关于从空数组开始的问题,这是我的解决方案,仅使用^{}

import numpy as np

# Some arrays to append in a loop
arrays = (
    np.random.rand(100, 30, 10),
    np.random.rand(160, 30, 10),
    np.random.rand(120, 30, 10)
)

# Initial empty array
array = np.zeros((0, 30, 10))

# Appending arrays in loop
for a in arrays:
    array = np.concatenate((array, a), axis=0)

# Output shape
print(array.shape)

输出:

(380, 30, 10)

希望有帮助

                    
System information
                    
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
NumPy:       1.18.1
                    

正如@Nullman在评论中建议的那样(np.vstack

您可以像这样创建空数组>>> np_model = np.empty((0,30,10))

>>> np_model = np.empty((0,30,10))

>>> a = np.random.rand(100,30,10)
>>> b = np.random.rand(160,30,10)
>>> c = np.random.rand(120,30,10)

# It can done by one-line like`np_model = np.vstack((a,b,c))`
# but i guess you have loop dependency here
>>> np_model = np.vstack((np_model,a))
>>> np_model = np.vstack((np_model,b))
>>> np_model = np.vstack((np_model,c))

>>> np_model.shape
(380, 30, 10)

相关问题 更多 >