繁体   English   中英

如何组合这样的numpy数组列表?

[英]How to combine list of numpy arrays like this?

我有多个 numpy 数组的列表。 每个数组都是一维水平的,它们的垂直长度是不同的,每列是一个 uint16。 我的列表中可能包含两个短数组的示例:

[array([[134],
       [133],
       [ 46],
       [133]], dtype=uint16)]...
array([[ 18],
       [ 45],
       [121],
       [ 45],
       [ 18],
       [ 17], dtype=uint16)]...

正如我所提到的,垂直长度以及数组内的整数以及数量都不同。 我在一个列表中有多个这样的数组的原因是因为每个数组中的每个整数都代表一个单独数组中元素的索引。 每个数组(带有索引的数组,如上所示)都有另一个与之关联的数组。 我想将所有内容堆叠到一个数组中,而不是多个数组。 我成功地为单独的数组(不是显示的数组)做了这个。 但是,我无法用相应的索引堆叠数组,因为每个元素的索引都发生了变化。 例如,在上面显示的第二个数组中,如果 134 是第一个数组中的最大整数,那么第二个数组中的 18 应该变为 152,因为这是新堆叠元素数组中的元素的索引。 我已经坚持了一段时间,希望我已经足够详细了。 我不确定如何解决这个问题。 有没有一种快速的方法来做这样的事情? 你会怎么做? 上面的两个数组只是简单的例子,显然它不会因为有一个这样的索引数组(例如,至少在某个地方应该有所有 0 - 134)。 我还应该提到一个索引可以在数组中重复。 我想我想要的是获取前一个数组的最大数量并将它们全部添加到它之后的数组中。 更新:具有输入/所需输出的最小可重现代码:

import numpy as np

arr1 = np.array([0, 1, 2, 2, 2, 1, 0, 0, 2], dtype=">i").reshape(9, 1)
arr2 = np.array([0, 2, 2, 2, 0, 2, 0, 1, 1], dtype=">i").reshape(9, 1)
list_of_arrs = [arr1, arr2]
# using list_of_arrs, i want the desired output:
# -> [[0] [1] [2] [2] [2] [1] [0] [0] [2] [3] [5] [5] [5] [3] [5] [3] [4] [4]]

注意:即使数组包含相同范围的整数 0 - 2 和相同的长度,实际的数组可能会也可能不会。 基本上我想取前一个数组的最高整数并将其 + 1 并将其添加到下一个数组的每个整数中,并确保它使用新数组来执行下一个数组,依此类推......

在这种情况下,您应该使用np.append而不是简单的串联。

import numpy as np

arr1 = np.array([0, 1, 2, 2, 2, 1, 0, 0, 2], dtype=">i").reshape(9, 1)
arr2 = np.array([0, 2, 2, 2, 0, 2, 0, 1, 1], dtype=">i").reshape(9, 1)

list_of_arrs = np.append(arr1, arr2 + np.max(arr1) + 1, axis=0)

这将为您提供所需的数组列表。

print(list_of_arrs)
# [[0] [1] [2] [2] [2] [1] [0] [0] [2] [3] [5] [5] [5] [3] [5] [3] [4] [4]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM