将特定格式的一对numpy数组附加到第3个数组

时间:2016-08-19 12:46:41

标签: python arrays numpy

我正在从数据集中成对提取数据点。一对由2个numpy数组组成,每个数组形(3, 30, 30)。我们称他们为X1Y1。接下来的一对将是X2Y2,然后是X3Y3等。我不知道会有多少对,所以我必须使用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.concatenatevstackhstack实现起来很棘手,因为它们似乎无法执行第一个实例,即将第一对附加到最初为空的{{1 }}

谢谢!

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.appendconcatenate需要匹配尺寸(在连接方向上)。各种stacks只调整维度的总数。