我们在尴尬的数组中是否已经有了类似于 np.add 的函数?
我处于需要添加它们的情况,并且“+”运算符适用于简单数组但不适用于嵌套数组。
例如 >>> ak.to_list(c1)
[[], [], [], [], [0.944607075944902]]
>>> ak.to_list(c2)
[[0.9800207661211596], [], [], [], []]
>>> c1+c2
回溯(最后一次调用):文件“”,第 1 行,在文件“/afs/cern.ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2/src/bbDMNanoAOD/analyzer/dependencies/lib/python3.6/site -packages/numpy/lib/mixins.py”,第 21 行,在 func 返回 ufunc(self, other) 文件“/afs/cern.ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2/src/bbDMNanoAOD/analyzer/dependencies /lib/python3.6/site-packages/awkward1/highlevel.py”,第 1380 行,在array_ufunc中 返回尴尬1._connect._numpy.array_ufunc(ufunc,方法,输入,kwargs)文件“/afs/cern.ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2/src/bbDMNanoAOD/analyzer/dependencies/lib/python3.6/ site-packages/awkward1/_connect/_numpy.py”,第 107 行,在 array_ufunc 输出 = 尴尬1._util.broadcast_and_apply(输入,getfunction,行为)文件“/afs/cern.ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2 /src/bbDMNanoAOD/analyzer/dependencies/lib/python3.6/site-packages/awkward1/_util.py”,第 972 行,在broadcast_and_apply out = apply(broadcast_pack(inputs, isscalar), 0) 文件“/afs/cern .ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2/src/bbDMNanoAOD/analyzer/dependencies/lib/python3.6/site-packages/awkward1/_util.py”,第 745 行,应用 outcontent = apply(nextinputs, depth + 1) 文件“/afs/cern.ch/work/k/khurana/EXOANALYSIS/CMSSW_11_0_2/src/bbDMNanoAOD/analyzer/dependencies/lib/python3.6/site-packages/awkward1/_util.py”,第 786 行,在应用 nextinputs.append(x.broadcast_tooffsets64( offsets).content) ValueError:在 ListOffsetArray64 中,无法广播嵌套列表
(https://github.com/scikit-hep/awkward-1.0/blob/0.3.1/src/cpu-kernels/operations.cpp#L778)
我可以添加它们的唯一方法是使用第一个,然后将 None 替换为 0。
>>> z1=ak.fill_none(ak.firsts(c1),0.)
>>> z2=ak.fill_none(ak.firsts(c2),0.)
>>> z1
<Array [0, 0, 0, 0, 0.945] type='5 * float64'>
>>> z2
<Array [0.98, 0, 0, 0, 0] type='5 * float64'>
>>> z1+z2
<Array [0.98, 0, 0, 0, 0.945] type='5 * float64'>
即使范围/功能有限,也可以为 ak 设计类似于 np.add 的东西。通过有限的范围,我的意思是如果它只能在相同维度的 ak 数组上工作,那么它至少可以满足我目前的目的。
谢谢。