我正在从数据集中成对提取数据点。一对由2个numpy数组组成,每个数组形(3, 30, 30)
。我们称他们为X1
和Y1
。接下来的一对将是X2
和Y2
,然后是X3
和Y3
等。我不知道会有多少对,所以我必须使用np.append
之类的东西。
所以我想要这样的东西:
>>X1, Y1 = extract_X_and_Y_from_data(data)
>>pair1 = np.array([X1, Y1])
>>pair1.shape
(2, 3, 30, 30)
>>list_of_pairs.some_append_function(pair1)
>>list_of_pairs.shape
(1, 2, 3, 30, 30)
>>X2, Y2 = extract_X_and_Y_from_data(data)
>>pair2 = np.array([X2, Y2])
>>list_of_pairs.some_append_function(pair2)
>>list_of_pairs.shape
(2, 2, 3, 30, 30)
...
>>X50, Y50 = extract_X_and_Y_from_data(data)
>>pair50 = np.array([X50, Y50])
>>list_of_pairs.some_append_function(pair50)
>>list_of_pairs.shape
(50, 2, 3, 30, 30)
总而言之,我需要最终的list_of_pairs为形状(no_of_pairs, 2, 3, 30, 30)
的numpy数组。 np.append
一直给我(no_of_pairs, 2)
,我不太清楚为什么。
注意:np.concatenate
,vstack
或hstack
实现起来很棘手,因为它们似乎无法执行第一个实例,即将第一对附加到最初为空的{{1 }}
谢谢!
答案 0 :(得分:1)
使用列表追加
list_of_pairs = [] # real list
for data in database:
X1, Y1 = extract_X_and_Y_from_data(data)
pair1 = np.array([X1, Y1])
list_of_pairs.some_append_function(pair1)
array5d = np.array(list_of_pairs)
>> array5d.shape
(50, 2, 3, 30, 30)
appending
到列表的速度相对较快,因为它只是添加了一个指向列表的指针。您的pair
数组仍在内存中。
np.array(alist)
构建一个新数组,将新组件上的组件连接起来(与np.array([[1,2,3],[4,5,6]])
中相同)
有一个新功能np.stack
可让您更好地控制哪个维度是新的。所有stack
函数最终都会调用np.concatenate
。这包括错误名称(并且经常被滥用)np.append
。 concatenate
需要匹配尺寸(在连接方向上)。各种stacks
只调整维度的总数。