问题标签 [awkward-array]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 当 ak.Array 子类的属性依赖于 Numba 编译的函数时,如何解决 TypingErrors?
我已经仔细阅读了笨拙的 1 存储库中的文档和演示笔记本(我完全有可能错过了一些明显的东西),但是我误入了陌生的领域,希望得到一些帮助。
假设我在极坐标系中有点,我使用尴尬1 库将这些点作为记录数组提供给用户。一些用户可能更喜欢使用笛卡尔坐标系中的点,因此我可以通过添加行为来适应它们,以下示例有效。
现在假设转换必须使用 Numba 编译的函数。我在以下示例中定义了一个,但原则上它可能来自我无法控制的第三方库。以下适用于单个记录,但会在记录数组上引发 TypingError。
解析回溯揭示了 TypingError 的原因:
TypingError: can't resolve ufunc cos for types (awkward1.ArrayView(awkward1.NumpyArrayType(array(float64, 1d, A), none, {}), None, ()),)
这是公平的,因为期望 Numba 在没有开发人员帮助的情况下知道如何使用这种类型是不合理的。
我发现的一种解决方法是np.asarray()
在 的定义内调用Polar2Cartesian.x
,即cos(np.asarray(self.theta))
。虽然cos
返回一个 NumPy 数组,Polar2Cartesian.x
但由于随后与self.r
. 一般来说,可以根据需要将返回值转换为不合适的记录或数组。
但是这个解决方案是“awkward1-approved”,还是我应该走我为 theta 和 x 提供 typer 和 lower 函数作为附加行为的路线?如果是后者,有人可以指导我如何正确编写 typer 和 lower 函数吗?
在这一点上,我想知道我的问题标题的范围是否过于广泛。如果有人有更好的建议,请告诉我。
uproot - 如何使用 np 数组作为锯齿数组的掩码(python - 尴尬)?
我有一个根文件,我想从中提取每个事件的某个候选人。另一方面,我有一个 numpy 数组,其中包含我要提取的候选人的索引。
假设我的根文件有以下分支:
branch = [[8.956237 9.643666] [5.823581] [3.77208 5.6549993] [5.91686] [13.819047 14.108783]]
我想要前 4 个事件的第一个候选者,最后一个事件的第二个,因此,我有以下 numpy 数组:
npMask = array([[0],[0],[0],[0],[1]])
当我将 应用于 时npMask
,branch
结果不是我所期望的:
branch[npMask]
[[[8.956237 9.643666]] [[8.956237 9.643666]] [[8.956237 9.643666]] [[8.956237 9.643666]] [[5.823581]]]
但是,如果我将numpy
数组转换为jagged
数组,它就可以正常工作:
awkMask = awk.fromiter(npMask)
branch[awkMask]
[[8.956237] [5.823581] [3.77208] [5.91686] [14.108783]]
这里的问题是铸造需要太多时间,我正在使用该iterate
方法和 10k entrysteps
,每次迭代需要大约 65% 的时间。
所以,我的问题是:有没有正确的方法使用 numpy 数组作为锯齿状数组的掩码?
笔记
我通过比较三个不同的分支并从这三个分支中选择具有最高值的候选人来创建我的 numpy 数组,例如
compare1 = [[0 -0.1] [0] [0.65 0.55] [0.5] [0.6 0.9]]
compare2 = [[0.99 -0.1] [0.9] [0.45 0.2] [0.5] [0.66 0.99]]
compare3 = [[0.91 0.3] [0.77] [0.5 -0.2] [0.5] [0.87 0.59]]
python - 转换列表列表中的元组列表(NP数组)
我有一个来自 api 的数组响应,我得到了这个 poly:
我需要将每个项目乘以 0.35,它们是我的代码:
我有一个<class 'awkward1.highlevel.Array'>
对象,然后我将其更改为np array
但这被转换为错误的格式
我需要我的结果数组是这样的np.array int32
:
有人可以帮助我吗?
awkward-array - 使用笨拙的数组 1.0 组合函数进行两粒子组合时出错
使用笨拙的数组 1.0 将粒子与ak.combinations
. 我在尝试对ak.unzip
我所做的组合进行操作时看到错误(按照此处的教程:https ://mybinder.org/v2/gh/jpivarski/2020-07-13-pyhep2020-tutorial.git/1.1?urlpath=实验室/树/tutorial.ipynb)。
我在这里放了一个重现错误的示例:
https://github.com/donalrinho/awkward1_combinatorics_test
并且非常感谢任何帮助理解我做错了什么。我看到的错误是:
当我将输入数据限制为特定变量时,不会发生错误,例如:
我只传入数组pt
的。pi
awkward-array - 绘制不同长度的锯齿状数组
尝试使用不同长度的锯齿状数组绘制二维直方图或图形时遇到问题。
这是一个简单的例子。假设有 7 个 gen 级 pT 及其 Et 事件。
这里,一些事件(2nd、5th)有两个 y 值对应一个 x 值。我想制作图表或二维直方图,将 x = pt 和 y = et 放在一起,并将两个点放在一起。即 (31.7, 25.5) 和 (31.7, 20)
如何使这些值对齐以进行绘图?
python - 笨拙数组中的while循环等效函数/片段
我有一个要转换的函数,以便可以与笨拙的数组 1 一起使用。
由于已知原因,其后的函数用于浮点数但不适用于笨拙的数组。
我试图将其转换为 numpy/awkward 兼容的形式,新功能看起来像
这个函数永远停留在while循环中,我找不到调试它的方法。
该函数的任务是将值保持在 +- kPI 之间的尴尬数组中,但此逻辑没有给出所需的结果。
例如
但是 ((x < -kPI)) 这给出了所需的输出。
但不是功能
基于while循环的逻辑,所需的输出应该是b/w +- kPI,有什么可以使用的直接或建议吗?
awkward-array - 从尴尬的数组中删除 none
我有一个尴尬的数组 (1),我得到了后处理。
一个数组看起来像:
我想从此数组中删除 None 元素。我可以使用循环删除它们,但我想避免它以节省一些计算时间。或者编写一个函数并使用 Numba 编译是唯一的选择?
谢谢。
python - 笛卡尔(交叉)产品和 np.unique()
根据您对我的方法的了解,这要么是关于np.unique()
在awkward1
数组上使用的问题,要么是对更好方法的呼吁:
设a
和b
是两个awkward1
具有相同外部长度(事件数)但内部长度不同的数组。例如:
a = [[1, 2], [3] , [] , [4, 5, 6]]
b = [[7] , [3, 5], [6], [8, 9]]
让f: (x, y) -> z
是一个作用于两个数字x
并y
产生数字的函数z
。例如:
f(x, y):= y - x
这个想法是将每个事件a
的每个元素与b
via中的每个元素进行比较,并f
过滤掉在应用于. 例如:a
b
f
f(x, y) < 4
我的方法是:
a
与来自相同元素但来自不同元素的配对可能会b
在切割中幸存下来。(例如{'x': 3, 'y': 3}
和{'x': 3, 'y': 5}
)
我的目标是将具有相同元素的这些对a
组合在一起,从而将new
数组重塑为:
new = [[], [{'x': 3, 'y': [3, 5]}], [], [{'x': 5, 'y': 8}, {'x': 6, 'y': [8, 9]}]]
我唯一的想法如何实现这一点是创建一个索引列表,a
使用以下命令在剪切后仍然存在new_i
:
但是,我需要此列表的唯一版本以使每个索引仅出现一次。这可以np.unique()
在 NumPy 中实现。但不适用于awkward1
:
我的问题:
他们是np.unique()
等价的awkward1
和/或你会推荐一种不同的方法来解决我的问题吗?
awkward-array - ak.add 功能类似于 np.add
我们在尴尬的数组中是否已经有了类似于 np.add 的函数?
我处于需要添加它们的情况,并且“+”运算符适用于简单数组但不适用于嵌套数组。
例如 >>> ak.to_list(c1)
回溯(最后一次调用):文件“”,第 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。
即使范围/功能有限,也可以为 ak 设计类似于 np.add 的东西。通过有限的范围,我的意思是如果它只能在相同维度的 ak 数组上工作,那么它至少可以满足我目前的目的。
谢谢。
awkward-array - 在一个尴尬的数组中获得最小值的所有位置
我有一个尴尬的数组,我想从中提取最小值和最大值的所有位置。但是,当我使用以下内容时,我只能提取第一次出现,而不是全部。是否有可能获得所有索引。
我需要的输出是:
在类似的行中,除了 argmin 或 argmax 之外,还可以执行类似 argN(array, number, axis=-1, keepdims=True) 的操作,其中当 number = 0 时变为 argmin,在 number = 1 时变为 argmax,对于这种特殊情况。
我试图查看 ak.where,但如果使用 ak.where 可行,我无法得到任何提示。文档说,ak.where 将接受 ak.Array of booleans
因此我尝试了:
我得到的错误是: return to_numpy(array.toRegularArray(), allow_missing=allow_missing) ValueError: in ListOffsetArray64, cannot convert to RegularArray because subarray lengths are not regular
(https://github.com/scikit-hep/awkward-1.0/blob/0.3.1/src/cpu-kernels/operations.cpp#L902)