tanay组python实验室代码使用的公共实用程序。
tgutils的Python项目详细描述
幻像类型
vanilla np.ndarray , pd.series 和 pd.dataframe 类型非常通用。它们是 无论使用的元素数据类型是什么,都是相同的,并且在 np.ndarray 的情况下, 维度(数组与矩阵)。
为了理解代码,跟踪更详细的数据类型是很有帮助的—是否 变量是数组或矩阵,元素数据类型是什么。为了方便起见, t实用程序 提供所谓的"幻影类型"。这些类型可以在类型声明中使用, 即使变量的实际数据类型仍然是vanilla numpy/pandas数据类型。
有关提供的幻象类型的列表,请参见 tgutils.numpy 和 tgutils.pandas 。到 用它们代替香草:
importnumpyasnpimportpandasaspd
编写修改的:
importtgutils.numpyasnpimporttgutils.pandasaspd
这将提供对使用 np. 和/或 pd. 前缀的香草符号的访问,以及 还将提供对下面描述的增强功能的访问。
例如,不要写:
defcompute_some_integers()->np.ndarray:...defcompute_some_floats()->np.ndarray:...defcompute_stuff(foo:np.ndarray,bar:np.ndarray)->...:...defworkflow()->...:foo=compute_some_integers()bar=compute_some_floats()compute_stuff(foo,bar)
你应该写:
defcompute_some_integers()->np.ArrayInt32:...defcompute_some_floats()->np.MatrixFloat64:...defcompute_stuff(foo:np.ArrayInt32,bar:np.MatrixFloat64)->...:...defworkflow()->...:foo=compute_some_integers()bar=compute_some_floats()compute_stuff(foo,bar)
这将允许读者了解所涉及的确切数据类型。更好的是,它将允许 mypy 来验证是否实际将正确的数据类型传递给每个函数调用。 例如,如果您错误地编写计算内容(bar,foo),那么 mypy 会抱怨 数据类型不匹配-即使在封面下, foo 和 bar 都有 运行时的相同数据类型: np.ndarray
为了进一步帮助进行 mypy 类型检查, tgutils 包包含一个 stubs 目录 包含非常部分的快速和脏类型的存根,用于 numpy 和 pandas (理想情况下,一些勇敢的 soul(s)将解决为这些库提供适当存根的非常困难的问题, 允许删除 t实用程序 存根)。导入tgutils.setup\mypy模块 将 mypypath 设置为此stubs目录,这也是一种黑客攻击(参见 在 setup.py 文件中使用此选项的示例。
类型操作
在执行计算时,对数据类型的控制也很重要。它影响性能, 内存消耗甚至一些操作的语义。例如,整数元素可以 永远不要 nan 而浮点元素可以,布尔元素有自己的逻辑,并且 字符串元素不同于数字元素。
为此, tgutils 提供两个函数, am 和 be 。这两个功能 返回请求的数据类型,但 am 只是断言,而 be 是转换操作。 也就是说,写入 arrayint32.am(foo) 将返回 foo 作为 arrayint32 ,或者将引发 如果 foo 不是 int32 的数组,则出错;在写入 arrayint32时,be(foo) 将始终 返回 array int32 ,如果它是 int32 的数组,则返回 foo ,或者返回 foo 的元素是 foo 元素到 int32 元素的转换
取消/序列化
幻像类型还提供读写操作,以便有效地将数据存储在磁盘上。 也就是说,写入 array int32.read(path) 将从 指定的路径和 array int32.write(foo,path) 将写入 int32 元素的数组 进入指定路径。