ENH: 为 (结构化) dtype 提供自定义对齐帮助
作者: seberg创建于 2025年2月11日更新于 2026年9月16日
但我想另一个问题可能已经解决了。
在实践中,用户的自定义对接需求相对适合结构化的D型,这已经变得比较普遍了。 在C++ 1中,将使用:
结构{
a 内;
结构排列( 8) {
int4 t b; (中文(简体) ).
int4 t c; (中文(简体) ).
* ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?因为后来的计算内核需要这种对齐. NumPy可以通过自定义"offets=[]"在创建 Dtype时处理这种类型的 Dtype.
问题是这里有"相通"的两个概念:
- 用户希望有一个特定的计算内核所需的一个,即NumPy可能或可能无法(甚至需要)保证。
- 被NumPy使用的一种(不常用于结构化的dtype,因为我们不怎么使用它们). 例如,这用于决定我们在运行一个 ufunc 之前是否需要复制一个数组 。
因此,允许用户仅仅设置/改变“调整”的d型号,目前至少可能导致尴尬的副本。
-- -- . . .
解决方案:我可以看到我们可以做的三件事(这些不是必要的独家)
- 在 “np.dtypes.<...}” 中添加一个帮助器,以构建一个结构对齐的dtype(或使dtype对齐)。 (可能是“np.dtype”的一部分,但帮助者似乎更容易)。
- 允许至少将结构化的D型设定对齐。 我们要么接受两个概念相冲突,要么要求
习惯-调整-最大-调整'。 如果使用案例大多是习惯-调整-最大-调整 ' ,我实际上看不出有问题。 - 我们实际上可以有一个第二个,自定义,对齐,可以更大,只有在构建一个新的结构化的dtype(而不是CPU对齐需要)时才能执行. 这主要可以允许筑巢和索引使自定义的对接活下来. 它会非常针对结构化的dtype,我认为(即其他dtype没有带自定义的对齐).
某种形式的帮助 可能是有道理的,我想。 所有这些对我来说似乎都相当合理(2. 不使用`习惯-调整-最大-调整'可能有点"我知道自己在做什么").
内容来源: numpy/numpy