首页/文章/ 详情

ANSA二次开发_Python基础-numpy模块

3月前浏览306
Numpy(Numerical Python)是Python中一个非常重要的库,主要用于进行高性能的数学计算。在开发中涉及到数值计算时,使用频率非常高,主要是由于提供了一个强大的N维数组对象ndarray,以及用于对这些数组进行操作的各种函数和工具,我们就不用自己写相关函数。
当然我们在常规的二次开发中使用的功能很少,Numpy是科学计算和数据分析的基础库,广泛应用于数据处理、机器学习、深度学习等领域,功能太强大了就我目前主要用于简单的数值计算。


Numpy的主要特点包括:
  • 高性能的多维数组对象和对应的操作:Numpy的数组对象比Python的内置数据结构提供了更高效的存储和数据操作。

  • 广泛的数学函数库:Numpy提供了大量的数学函数,用于快速对数组进行计算,包括线性代数、统计操作等。

  • 数组广播功能:Numpy可以让不同大小的数组在一起进行数学运算。


使用案例

1. 计算两组节点的最近与最远空间距离

假设我们有两组空间点A和B,我们想要计算组A中的每个点与组B中的每个点之间的最近和最远距离。这是以前所分享的一个案例,这里再重新介绍下。tcl调用Python实现两组节点最近距离计算












import numpy as np# 假设A和B是两组空间点,每行代表一个点,列代表维度A = np.array([[1, 2, 3], [4, 5, 6]])B = np.array([[7, 8, 9], [10, 11, 12]])# 计算所有A与B之间的距离distances = np.sqrt(np.sum((A[:, np.newaxis, :] - B[np.newaxis, :, :]) ** 2, axis=2))# 找到最近和最远的距离min_distance = np.min(distances)max_distance = np.max(distances)print("最近距离:", min_distance)print("最远距离:", max_distance)


2. 两个空间点的距离







import numpy as nppoint1 = np.array([1, 2, 3])point2 = np.array([4, 5, 6])distance = np.linalg.norm(point1 - point2)
print("两点之间的距离是:", distance)


3. 计算两点的矢量






import numpy as npA = np.array([1, 2, 3])B = np.array([4, 5, 6])vector = B - Aprint("从A到B的矢量:", vector)


4.矢量的相关函数























































import numpy as np
def calculate_vectors(points):"""    根据输入点的数量,计算归一化矢量或法向量。     返回:    vector -- 归一化的矢量或法向量。    first_point -- 第一个点的坐标。    """    num_points = points.shape[0]
if num_points < 2:raise ValueError("至少需要两个点来进行计算。")
if num_points == 2:# 计算两点之间的矢量并归一化        vector = points[1] - points[0]        norm = np.linalg.norm(vector)        normalized_vector = vector / norm        return normalized_vector, points[0]
else:# 计算前三个点的法向量        vector1 = points[1] - points[0]        vector2 = points[2] - points[0]        normal_vector = np.cross(vector1, vector2)        norm = np.linalg.norm(normal_vector)        normalized_normal_vector = normal_vector / norm        return normalized_normal_vector, points[-1]# 示例使用# 两点points_2 = np.array([    np.random.rand(3),    np.random.rand(3)])# 三点points_3 = np.array([    np.random.rand(3),    np.random.rand(3),    np.random.rand(3)])# 四点(只考虑前三点)points_4 = np.array([    np.random.rand(3),    np.random.rand(3),    np.random.rand(3),    np.random.rand(3)])

vector, first_point = calculate_vectors(points_2)vector, first_point = calculate_vectors(points_3)vector, first_point = calculate_vectors(points_4)

5、计算垂直于一个矢量的其余两个矢量,教程最后的案例会使用到


























import numpy as npdef find_perpendicular_vectors(point, vector):    """
   参数:    point -- 空间点,形式为(x, y, z)。    vector -- 给定的矢量,形式为(vx, vy, vz)。    """    # 确保给定的矢量不是零矢量    if np.allclose(vector, np.zeros(3)):        raise ValueError("给定的矢量不能是零矢量。")    random_vector = np.random.rand(3)    perpendicular_vector1 = np.cross(vector, random_vector)    perpendicular_vector2 = np.cross(vector, perpendicular_vector1)    perpendicular_vector1_normalized = perpendicular_vector1 / np.linalg.norm(perpendicular_vector1)    perpendicular_vector2_normalized = perpendicular_vector2 / np.linalg.norm(perpendicular_vector2)
   return perpendicular_vector1_normalized, perpendicular_vector2_normalized
point = np.array([1, 2, 3])# 以z轴方向的单位矢量为例,当然可以通过判断生成任意轴向量判断两个轴是否平行vector = np.array([0, 0, 1])
perpendicular_vectors = find_perpendicular_vectors(point, vector)print(perpendicular_vectors)


这些例子展示了Numpy在处理矢量计算中的一些基本用法。Numpy的功能非常强大,这里只是冰山一角。

学习了Numpy,就可以进行更复杂的数学计算和数据分析,这对于进一步学习数据科学和机器学习等领域非常有帮助,包括目前如火如荼的生成式AI,当然这需要的数学知识也会越来越多。

来源:TodayCAEer
二次开发ANSApythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-08-14
最近编辑:3月前
TodayCAEer
本科 签名征集中
获赞 18粉丝 28文章 242课程 0
点赞
收藏
作者推荐

HyperStudy和Optimus中使用样本数据快速创建代理模型(3/3)

背景已有一组或一系列样本数据,如下图所示,目的是基于该组数据直接创建代理模型,以便于后续快速预测结果以及寻优。*上图数据中,第一列是ID,P1~P5为自变量(如模型中的料厚、尺寸等),Mass、NodeDisplacement、ElemStrain为因变量(也称响应,如模型的重量、计算结果的节点位移、单元应变等指标数据)工具本次将分别使用AltairHyperStudy和NoesisOptimus两款软件来基于数据快速创建代理模型。##################################################在前两篇文章中(HyperStudy和Optimus中使用样本数据快速创建代理模型(1/3)、HyperStudy和Optimus中使用样本数据快速创建代理模型(2/3)),分别介绍了数据准备以及如何在HyperStudy导入数据模型并创建代理模型,以及相关的模型数据查看等功能,本文将介绍如何在Optimus软件中训练代理模型、模型验证等功能。##################################################引言在第一篇文章(HyperStudy和Optimus中使用样本数据快速创建代理模型(1/3))的数据准备章节,介绍了对于Optimus软件处理,需要的数据格式,此处再回顾一下:1)在文本编辑工具中,将csv文件中的逗号替换成空格;2)在文件开头插入两行:·第一行填入自变量的数量,本例中有5个自变量,固第一行填入数字“5”;·第二行填入因变量的数量,本例中有3个因变量,固第二行填入数字“3”。最终处理好的数据应该如下图所示:模型训练-Optimus1、新建项目:打开Optimus软件界面,点击左上角“新建项目”按钮,配置项目路径:2、导入数据:选择“方法”→“导入表格”,选择准备好的数据文件(*.csv):3、此时项目树的“方法”节点下,会新增一个节点,该节点以数据文件的文件名命名,鼠标右键此节点:“后处理”→“结果列表”,可以查看数据表格,表格中,软件已经按照我们准备的数据文件中约定的自变量数量和因变量数量进行了处理,如下表所示,“计算点序号”和自变量P1~P5之间有粗线隔开,自变量P1~P5和因变量Mass...之间有粗线隔开:4、截止此步,Optimus软件中已经可以基于导入的数据进行相应的后处理,如下图所示的相关性表格(“后处理”→“相关性”)、散点相关图(“后处理”→“散点相关图”)、散点图、3维散点图、自组织映射图、气泡图、平行坐标图等:5、言归正传,开始创建代理模型,鼠标右键导入的数据节点,选择“新建模型”:弹出如下图所示对话框,在对话框中选择算法分类(1),选择具体的算法(2):在Optimus中,有如下四种分类的算法:其中:1)近似模型中有如下算法:2)插值模型中有如下算法:3)机器学习模型中有如下算法:4)集合模型中有如下算法:用户可根据实际需求选择适合的算法,本案例中,采用插值模型中的克里金模型,常用情况下其余参数保持默认值即可,配置完成后,点击对话框右下角的“执行”按钮,便可开始代理模型的创建:6、完成代理模型的创建后,模型树中会在导入的数据节点下新生成一个模型节点,如下图所示:7、鼠标右键该节点,可对模型进行后处理,如下图所示:如下图所示为模型三维图:X(P2)、Y(P5)、Z(NodeDisplacement)8、有了代理模型以后,可以右键数据节点,点击“生成工作流”:软件将创建一个只有输入参数列表和输出参数列表的工作流:同时,左侧模型树中也会新产生一个如下图所示的工作流节点:其中,输入参数列表中自动创建了5个输入参数的信息,此时可根据需求进行修改:输出参数列表中,自动创建了三个输出参数:9、数据验证:右键新生成的工作流节点,“新建方法”→“表格”:弹出如下对话框,我们需要验证10组数据,则在“计算次数”框中输入10,回车,下方表格自动生成10行,从表格工具中可直接将10组P1~P5的自变量数据复制粘贴到对话框的表格中:切换到“输出参数”界面(1),将输出参数的“求解”列,全部选择为之前所创建的“模型1”,代表此次表格计算,将使用对应的代理模型计算结果,最后点击对话框右下角的“执行”按钮:此时,左侧树节点里面会生成一个对应的“表格计算1”的节点,计算完成后字体会变成绿色(计算过程中为斜体):右键该节点,点击“载入结果”,节点文字颜色变黑,如下图所示,右键该节点,“后处理”→“结果列表”,可以查看测试结果数据,下图红色方框内的结果数据就是基于代理模型计算得到的结果数据:同理,也可以进行相关的后处理数据查看,此处不再赘述。至此,便完成了Optimus软件中的代理模型创建、数据验证、数据后处理等介绍。###############################################相同的伏笔:代理模型训练完成以后,如何保存并在以后的工作中直接使用,以用于快速预测结果数据。(将在后续其他系列文章中介绍,敬请关注,也欢迎大家私信交流,感谢。)###############################################“本系列是基于已有的样本数据直接在软件中创建代理模型,在后续的文章中,将陆续介绍如何在这两款软件中通过流程自动化去获取样本数据,其过程包括模型参数化、求解器调用、结果数据提取、DOE采样、代理模型创建、寻优等。敬请期待”=============点关注,不迷路=============最后,大家有什么想了解的,也可以私信留言,感谢各位的支持。来源:TodayCAEer

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈