可能这是一个平庸的问题,我热切地希望如此,但我已经被困在这个问题上太多天了,没有尝试寻求帮助。
\nStackOverflow 中也有类似的问题,例如Python 子包导入和Python: importing a sub\xe2\x80\x91package or sub\xe2\x80\x91module。不过,这些问题与导入实际存在于包中的子包(及其内容)有关。
\n我开发了一些软件包,我们称它们为package1和package2。这些包本身就有意义,具有非常复杂的依赖关系,并且需要编译某些部分,但是一旦它们出现在 Pipy 上,最终用户就消除了这种复杂性。
我现在正在开发第三个包,package3它旨在合并package1并package2添加一些额外的功能。我希望用户从和package1导入功能。package2package3
剥离package3到骨架后,我们可以将其缩减为单个__init__文件,如下所示:
// Content of the init file\nimport package1\nimport package2\n\n__all__ = [\n "package1",\n "package2"\n]\nRun Code Online (Sandbox Code Playgroud)\n现在,在脚本中,我执行以下操作:
\nfrom package3 import package1\nfrom package3 import package2\nRun Code Online (Sandbox Code Playgroud)\n有用。
\n但是,执行以下命令不起作用:
\nfrom package3.package1 import content_of_package1\nRun Code Online (Sandbox Code Playgroud)\n因为它会引发以下错误:
\nModuleNotFoundError: No module named \'package3.package1\'\n …Run Code Online (Sandbox Code Playgroud) 我有一个相当大的矩形(>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 样式矩阵,另一种提供目标矩阵。两个 …
在虚构的患者数据集中,可能会遇到下表:
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)