【发布时间】:2019-04-15 13:08:01
【问题描述】:
在我的新手 Python 3.7 项目中,许多函数中的参数都是 numpy.ndarray 的。这些必须是二维r x n 矩阵。行维度r 是必不可少的:一些函数需要1 x n 向量,另一些需要2 x n 矩阵,r 最多三个甚至更多。还有为任何r x n 数组定义的函数。 (列维度n 对于设计目的来说不是必需的。)
根据我的 Matlab 经验,此要求可能会令人困惑且容易出错。所以我考虑了以下方法:
- 记录方法参数(当然!)
- 单元测试(当然!)
- 在某些函数中进行验证并抛出异常。 (但是,这不是很实用,也不是很高效。)
- 定义数据类:
OneRow、TwoRows、ThreeRows和FourPlusRows。每个都有一个ndarray字段,在构造函数中验证。好处包括类型提示和更好的领域建模,如 DDD。缺点是额外的复杂性。
问题:鉴于 Python 3 中引入的类型提示以及函数式编程的趋势,当前解决此问题的 Python 方法是什么?
【问题讨论】:
-
assert a.shape[0] == r? -
类型提示尚未在 numpy 中实现。
-
尽可能编写 numpy 代码以处理“任何”维度。如果不测试
ndim和shape就可以了。无论是引发错误还是调整形状都是您的选择。 -
根据 3.) 这有时对于获得 SIMD 向量化或在 jit 编译代码中展开小循环是必要的,因此可以显着提高速度。 github.com/numba/llvmlite/issues/270
标签: python arrays numpy type-hinting