小编mpa*_*cer的帖子

使用python3从jupyter笔记本中相对导入的另一个目录中的模块导入本地函数

我有一个类似于以下的目录结构

meta_project
    project1
        __init__.py
        lib
            module.py
            __init__.py
    notebook_folder
        notebook.jpynb
Run Code Online (Sandbox Code Playgroud)

notebook.jpynb我尝试使用相对导入来访问函数function()module.py使用:

from ..project1.lib.module import function
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

SystemError                               Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个使用相对导入工作?

请注意,笔记本服务器在meta_project目录级别实例化,因此它应该可以访问这些文件中的信息.

另请注意,至少与最初的预期project1并未被视为模块,因此没有__init__.py文件,它只是作为文件系统目录.如果问题的解决方案需要将其视为一个模块并包含一个__init__.py文件(即使是空白文件),那么这样做是不错的,但这样做不足以解决问题.

我在机器和相对导入之间共享这个目录允许我在任何地方使用相同的代码,并且我经常使用笔记本进行快速原型设计,因此涉及黑客攻击绝对路径的建议不太可能有用.


编辑:这与Python 3中的相对导入不同,Python 3通常讨论Python 3中的相对导入,特别是从包目录中运行脚本.这与在jupyter笔记本中工作有关,该笔记本试图在另一个具有不同的一般和特定方面的目录中的本地模块中调用函数.

python relative-import jupyter-notebook

86
推荐指数
7
解决办法
6万
查看次数

当其他数组创建例程不需要时,为什么 numpy 的 fromiter 函数需要指定 dtype?

为了提高内存效率,我一直在努力将我的一些代码从列表转换为生成器/迭代器。我发现了很多案例,我只是将我制作的列表转换为np.array带有代码模式的列表np.array(some_list)

值得注意的是,some_list通常是一个迭代生成器的列表推导式。

我正在研究np.fromiter是否可以更直接地使用生成器(而不是首先将其转换为列表然后将其转换为 numpy 数组),但我注意到该np.fromiter函数与使用的任何其他数组创建例程不同现有数据需要指定dtype.

在我的大多数特定情况下,我可以完成这项工作(主要是处理对数似然,所以 float64 会很好),但它让我想知道为什么这只是fromiter数组创建者而不是其他数组创建者所必需的。

第一次尝试猜测:

内存预分配?

我的理解是,如果您知道dtypecount,它允许为结果预分配内存np.array,并且如果您不指定可选count参数,它将“按需调整输出数组的大小”。但是,如果您不指定计数,似乎您应该能够dtype像在正常np.array调用中一样即时推断出。

数据类型重铸?

我可以看到这对于将数据重新转换为 new 很有用dtype,但这也适用于其他数组创建例程,并且似乎值得将其放置为可选但不是必需的参数。

重述问题的几种方式

那么为什么您需要指定dtype要使用的np.fromiter;或者换句话说,指定dtype数组是否要按需调整大小会带来什么好处?

与我的问题更直接相关的同一问题的更微妙版本:我知道np.ndarray当您不断调整 s 的大小时,它们的许多效率收益都会丢失,那么使用np.fromiter(generator,dtype=d)over np.fromiter([gen_elem for gen_elem in generator],dtype=d)over 有np.array([gen_elem for gen_elem in generator],dtype=d)什么好处?

python arrays numpy generator memory-efficient

6
推荐指数
1
解决办法
2186
查看次数