将一个尴尬数组的第一个、第二个等元素添加在一起

问题描述 投票:0回答:2

我对笨拙的数组(以及一般的Python)非常陌生,只是想知道如何将 ak.array 中每个数组的第一个元素添加在一起。

例如 my_array = [[1,2,3], [4,5,6], [7,8,9].....]

我想要 1 + 4 + 7...

python awkward-array
2个回答
1
投票

您可以使用以下代码:

import awkward as ak

my_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

array = ak.Array(my_array)

#Use ak.firsts to extract the first elements of each sub-array
first_elements = ak.firsts(array)

#The ak.sum() function to add the first elements together
result = ak.sum(first_elements)

print(result) 

1
投票

如果您只想要所有嵌套列表中第一个元素的总和,那么@moaz ahmad的答案是最好的。 (另请参阅我对此的评论。)

但是,如果这是对所有第一次求和、所有秒数求和、所有三分之和等的踏脚石,那么您所描述的是一个

axis=0
求和。 (请参阅 ak.sum 的文档。)

>>> array = ak.Array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> ak.sum(array, axis=0)
<Array [12, 15, 18] type='3 * int64'>

结果的第一个元素是 1 + 4 + 7 = 12,第二个元素是 2 + 5 + 8 = 15,第三个元素是 3 + 6 + 9 = 18。您可以取这个结果的第一个元素,但是@moaz ahmad的答案涉及较少不必要的求和。

如果数组中列表的长度并非全部相等(如您的示例中所示),这也适用。 (等长列表的数组是规则的二维数组,

NumPy 是一个更好的工具。)考虑以下不规则示例:

>>> array = ak.Array([ ... [ 1, 2, 3 ], ... [ ], ... [ 3, 4 ], ... [None, 5, 6, 7, 8, 9], ... ]) >>> ak.sum(array, axis=0) <Array [4, 11, 9, 7, 8, 9] type='6 * int64'>
结果的第一个元素是 1 + 3 = 4(

None

 被跳过;仅当您的数据集缺少值时才相关),第二个元素是 2 + 4 + 5 = 11,第三个元素是 3 + 6 = 9,剩下的元素是 7、8、9,因为它们是用空格对齐的。

© www.soinside.com 2019 - 2024. All rights reserved.