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 元素的数组 进入指定路径。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java读取SSLSocket的最快或最佳方式   JavaGuice向类构造函数注入对象   java类不是抽象的,并且不会覆盖OnClickListener中的抽象方法onClick(视图)   java OpenGL 1.1更改颜色更改以前的颜色?   c#将Java/Android连接到。网络服务   java在节点上生成AES密钥   java Liferay与MarkLogic XDBC数据库集成   java使用静态初始化块来提高性能   java如何在需要不同参数的另一个方法中使用同一类中的方法   音频Java多种声音   Java显式引用转换   java Intellij,如何在maven项目中导入模块   java在什么条件下调用ELResolver的setValue方法?   java在beanshell中计算代码字符串并获取beanshell解释器返回的值   javascript将音频文件上载到服务器并从服务器响应设置图像   编码风格清理java代码,多个else if语句   java是否需要使此变量可变?   java线程未更新GlassPane上的进度条   java关闭调试模式@Vaadin Spring启动应用程序