我有一个JaggedArray
( awkward.array.jagged.JaggedArray
) 包含指向另一个位置的索引JaggedArray
。两个数组具有相同的长度,但包含的每个数组numpy.ndarrays
可以JaggedArrays
具有不同的长度。我想使用第一个数组的索引对第二个数组进行排序,同时从第二个数组中删除未从第一个数组索引的元素。第一个数组还可以包含-1
(如果需要,也可以替换为None
,但目前不是这种情况)的值,这意味着第二个数组中没有匹配项。在这种情况下,第一个数组中的相应位置应设置为默认值(例如0
)。
这是一个实际示例以及我目前如何解决此问题:
import uproot
import numpy as np
import awkward
def good_index(my_indices, my_values):
my_list = []
for index in my_indices:
if index > -1:
my_list.append(my_values[index])
else:
my_list.append(0)
return my_list
indices = awkward.fromiter([[0, -1], [3,1,-1], [-1,0,-1]])
values = awkward.fromiter([[1.1, 1.2, 1.3], [2.1,2.2,2.3,2.4], [3.1]])
new_map = awkward.fromiter(map(good_index, indices, values))
结果new_map
是:[[1.1 0.0] [2.4 2.2 0.0] [0.0 3.1 0.0]]
。
有没有更有效/更快的方法来实现这一目标?我在想一个人可以使用numpy
诸如 之类的功能numpy.where
,但是由于长度不同ndarrays
,至少对于我尝试的方式而言,这失败了。