Python的快速简单2D和3D结构张量实现。
项目描述
Python结构张量
Python的快速简单2D和3D 结构张量 实现。
安装
使用 pip install structure-tensor
安装软件包或克隆存储库。
CUDA支持
为了支持CUDA,安装额外的(可选)依赖项 CuPy。如果系统上已安装CUDA,则应使用 pip install cupy
,但这可能较慢,因为CuPy将在安装期间编译代码。或者使用预编译包之一。
小型示例
结构张量计算参数为 $\rho$ (rho
) 和 $\sigma$ (sigma
),它们是标量值。
使用NumPy的2D和3D
该 structure_tensor
软件包支持进行2D或3D结构张量分析。特征值(val
)按升序排序。
import numpy as np
from structure_tensor import eig_special_2d, structure_tensor_2d
sigma = 1.5
rho = 5.5
# Load 2D data.
image = np.random.random((128, 128))
S = structure_tensor_2d(image, sigma, rho)
val, vec = eig_special_2d(S)
对于形状为 (x, y, z)
的体积,特征向量(vec
)返回为 zyx
。
import numpy as np
from structure_tensor import eig_special_3d, structure_tensor_3d
sigma = 1.5
rho = 5.5
# Load 3D data.
volume = np.random.random((128, 128, 128))
S = structure_tensor_3d(volume, sigma, rho)
val, vec = eig_special_3d(S)
使用CuPy的3D
CuPy函数在 structure_tensor.cp
模块中可用。它们的工作方式与它们的NumPy对应函数类似,但它们返回 cupy.ndarray
。如果需要,函数将自动处理移动输入数据。
import cupy as cp
import numpy as np
from structure_tensor.cp import eig_special_3d, structure_tensor_3d
sigma = 1.5
rho = 5.5
# Load 3D data.
volume = np.random.random((128, 128, 128))
S = structure_tensor_3d(volume, sigma, rho)
val, vec = eig_special_3d(S)
# Convert from cupy to numpy. Moves data from GPU to CPU.
val = cp.asnumpy(val)
vec = cp.asnumpy(vec)
高级示例
structure_tensor
模块还包含用于并行“分块”计算结构张量和特征值分解的函数。最简单的方法是使用内置函数structure_tensor.multiprocessing.parallel_structure_tensor_analysis
。这允许计算分布在多个CPU和CUDA设备上。这可以加快计算速度数倍,并在计算过程中减少内存使用。
以下示例中,体积data
被分割成200立方体的块,工作负载将分布在16个CPU上。
S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=16*['cpu'], block_size=200)
或者,如果我们有可用的CUDA启用GPU,我们可以用它来代替。
S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=['cuda'], block_size=200)
如果GPU有足够的内存,我们可以通过使用多个进程向GPU馈送数据来加快计算速度。
S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda'], block_size=200)
如果我们有四个CUDA设备可用,我们可以选择使用几个特定的设备,例如设备0和2。
S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda:0'] + 4*['cuda:2'], block_size=200)
我们甚至可以选择使用CPU和GPU进程的混合,例如,为GPU 0分配四个进程,为GPU 2分配两个进程,以及8个在CPU上运行计算的进程。
S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda:0'] + 2*['cuda:2'] + 8*['cpu'], block_size=200)
理想的块大小取决于sigma
和rho
、设备以及设备的内存。通常,100到400之间的值效果良好。如果您遇到内存不足错误,请尝试减小块大小和/或进程数。
其他高级用法
在数据集中发布的笔记本也包含示例。笔记本StructureTensorFiberAnalysisDemo
[ 笔记本 | HTML ] 和 StructureTensorFiberAnalysisAdvancedDemo
[ 笔记本 | HTML ] 是一个好的起点。然而,这些笔记本是在添加parallel_structure_tensor_analysis
函数之前制作的,因此使用自己的代码进行并行ST计算。
贡献
参考
如果您将这些用于学术工作,请考虑引用我们的工作。
主要参考
Jeppesen, N.,等人。“使用结构张量分析量化制造方法对单向复合材料纤维方向的影响。” 复合材料A:应用科学和制造 149(2021):106541。
[ 论文 ] [ 数据和笔记本 ]
@article{JEPPESEN2021106541,
title = {Quantifying effects of manufacturing methods on fiber orientation in unidirectional composites using structure tensor analysis},
journal = {Composites Part A: Applied Science and Manufacturing},
volume = {149},
pages = {106541},
year = {2021},
issn = {1359-835X},
doi = {https://doi.org/10.1016/j.compositesa.2021.106541},
url = {https://www.sciencedirect.com/science/article/pii/S1359835X21002633},
author = {N. Jeppesen and L.P. Mikkelsen and A.B. Dahl and A.N. Christensen and V.A. Dahl}
}
其他论文
Jeppesen, N.,等人。“使用结构张量表征非紧压玻璃纤维增强复合材料的纤维方向。” IOP会议系列:材料科学和工程。 第942卷。第1号。IOP出版,2020。
[ 论文 ] [ 数据和笔记本 ]
Auenhammer, Robert M.,等人。“从X射线计算机断层扫描图像数据中稳健地分析纤维增强复合材料的X射线计算机断层扫描数据——XAE。” 复合材料科学和技术 (2022):109458。
[ 论文 ] [ 数据 ]
Auenhammer, Robert M.,等人。“X射线计算机断层扫描数据结构张量方向映射用于有限元模型——STXAE。” 软件影响 11(2022):100216。
[ 论文 ]
数据和笔记本
Jeppesen, N,Dahl, VA,Christensen, AN,Dahl, AB,& Mikkelsen, LP.(2020)。使用结构张量表征非紧压玻璃纤维增强复合材料的纤维方向 [数据集]。Zenodo。 https://doi.org/10.5281/zenodo.3877522
Jeppesen, N, Mikkelsen, Lars P., Dahl, V.A., Nymark, A.N., & Dahl, A.B. (2021). 使用结构张量分析量化单向复合材料中制造方法对纤维取向的影响 [数据集]. Zenodo. https://doi.org/10.5281/zenodo.4446499
Auenhammer, R.M., Jeppesen, N, Mikkelsen, Lars P., Dahl, V.A., Blinzler, B.J., & Asp, L.E. (2021). 非褶皱织物增强复合材料的X射线计算机断层扫描辅助工程方法 [数据集] [数据集]. Zenodo. https://doi.org/10.5281/zenodo.5774920
CuPy
参见 CuPy 参考部分.
更多信息
许可证
MIT 许可证 (见 LICENSE 文件).
项目详情
下载文件
下载适合您平台的应用文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
structure_tensor-0.3.2-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6914f28f6cbe76f081c970fbd6685e2a64e3b72a0d49a01e44fef1744b7c610b |
|
MD5 | 257d733e42f503eb523eb183ea8a9cf1 |
|
BLAKE2b-256 | 995520ec9bc5609b7afc06d99b5fa79632a6da9b50ec0e53a5a961c8450af544 |