小编Luc*_*tti的帖子

在新包中导入python子包

可能这是一个平庸的问题,我热切地希望如此,但我已经被困在这个问题上太多天了,没有尝试寻求帮助。

\n

StackOverflow 中也有类似的问题,例如Python 子包导入Python: importing a sub\xe2\x80\x91package or sub\xe2\x80\x91module。不过,这些问题与导入实际存在于包中的子包(及其内容)有关。

\n

我开发了一些软件包,我们称它们为package1package2。这些包本身就有意义,具有非常复杂的依赖关系,并且需要编译某些部分,但是一旦它们出现在 Pipy 上,最终用户就消除了这种复杂性。

\n

我现在正在开发第三个包,package3它旨在合并package1package2添加一些额外的功能。我希望用户从和package1导入功能。package2package3

\n

剥离package3到骨架后,我们可以将其缩减为单个__init__文件,如下所示:

\n
// Content of the init file\nimport package1\nimport package2\n\n__all__ = [\n   "package1",\n   "package2"\n]\n
Run Code Online (Sandbox Code Playgroud)\n

现在,在脚本中,我执行以下操作:

\n
from package3 import package1\nfrom package3 import package2\n
Run Code Online (Sandbox Code Playgroud)\n

有用。

\n

但是,执行以下命令不起作用:

\n
from package3.package1 import content_of_package1\n
Run Code Online (Sandbox Code Playgroud)\n

因为它会引发以下错误:

\n
ModuleNotFoundError: No module named \'package3.package1\'\n …
Run Code Online (Sandbox Code Playgroud)

python package

6
推荐指数
0
解决办法
138
查看次数

在磁盘上转置大型 numpy 矩阵

我有一个相当大的矩形(>1G 行,1K 列)Fortran 风格的 NumPy 矩阵,我想将其转置为 C 风格。

到目前为止,我的方法相对简单,使用以下 Rust 代码片段,使用源矩阵和目标矩阵的 MMAPed 切片,其中 和original_matrix都是target_matrixMMAPPed PyArray2,并由Rayon处理并行化。

由于target_matrix必须由多个线程修改,因此我将其包装在UnsafeCell.

let shared_target_matrix = std::cell::UnsafeCell::new(target_matrix);

original_matrix.as_ref().par_chunks(number_of_nodes).enumerate().for_each(|(j, feature)|{
    feature.iter().copied().enumerate().for_each(|(i, feature_value)| unsafe {
        *(shared_target_matrix.uget_mut([i, j])) = feature_value;
    });
});
Run Code Online (Sandbox Code Playgroud)

这种方法转置形状为 (~1G, 100) 的矩阵,~120GB 在 HDD 磁盘上需要~3 小时。转置 (~1G, 1000)、~1200GB 矩阵不会像人们天真地期望的那样线性扩展到 30 小时,而是会爆炸到几周。就目前情况而言,我已经在 2 天内成功地转置了大约 100 个功能,而且速度一直在减慢。

有几个方面,例如所使用的文件系统、HDD 碎片以及 MMAPed 如何处理页面加载,我的解决方案目前忽略了这些方面。

是否存在考虑到这些问题的已知的、更全面的解决方案?

关于顺序和并行方法的注意事项

虽然直观上,这种操作可能只受 IO 限制,因此不会从任何并行化中受益,但我们通过实验观察到,并行方法确实比顺序方法快三倍(在具有 12 个内核和 24 个线程的机器上)。转置形状为 (1G, 100) 的矩阵时的方法。我们不确定为什么会出现这种情况。

使用两个硬盘的注意事项

我们还尝试使用两种设备,一种提供 Fortran 样式矩阵,另一种提供目标矩阵。两个 …

python transpose numpy matrix rust

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

二进制矢量化熊猫DataFrame列

在虚构的患者数据集中,可能会遇到下表:

pd.DataFrame({
    "Patients": ["Luke", "Nigel", "Sarah"],
    "Disease": ["Cooties", "Dragon Pox", "Greycale & Cooties"]
})
Run Code Online (Sandbox Code Playgroud)

它将呈现以下数据集:

虚构疾病

现在,假设有多个疾病的行使用相同的模式(分离与字符,在这种情况下一个&),并存在一个完整列表diseases的毛病,我还没有找到一个简单的解决方案,适用于这种情况下pandas.get_dummies一个-hot编码器以获得每个患者的二进制向量。

如何以最简单的方式从初始DataFrame获得以下二进制矢量化?

pd.DataFrame({
    "Patients": ["Luke", "Nigel", "Sarah"],
    "Cooties":[1, 0, 1],
    "Dragon Pox":[0, 1, 0],
    "Greyscale":[0, 0, 1]
})
Run Code Online (Sandbox Code Playgroud)

所需结果

python dataframe pandas

4
推荐指数
1
解决办法
98
查看次数

标签 统计

python ×3

dataframe ×1

matrix ×1

numpy ×1

package ×1

pandas ×1

rust ×1

transpose ×1