如何使用np.r_生成各连线对应点编号索引列表 处理2D点坐标数据
实现逻辑
你已经提前定义了两个核心映射表:element_connection存储7条边各自连接的两个端点编号,X存储每个点对应的两个自由度编号,直接将每条边的两个端点对应编号拼接,即可得到目标index列表,不需要刻意用np.r_生成连续编号。
可运行的核心代码
import numpy as np # 注意补充l、h、以及未定义的c变量的实际赋值 l = 10 # 示例值,可替换为实际尺寸 h = 10 # 示例值,可替换为实际尺寸 c = np.ones((2,2)) # 示例刚度相关矩阵,替换为实际业务的c矩阵即可 coordinates_of_points = {1:[0,0], 2:[(2*l)/12,0.5556*h], 3:[(l)/2, h], 4:[(10*l)/12, 0.5556*h], 5: [l,0], 6:[(2*l)/12, h-3], 7:[(l)/2, h-3], 8:[(10*l)/12, h-3]} X = { 1:[1,2], 2:[3,4], 3:[5,6], 4:[7,8], 5:[9,10], 6:[11,12], 7:[13,14], 8:[15,16] } element_connection = { 1:[1,2], 2:[2,3], 3:[3,4], 4:[4,5], 5:[2,6], 6:[3,7], 7:[4,8] } K = np.zeros((20,20)) roh = np.array([[ 1, 5, 3, 4], [ 5, 6, -4, 8]]) # 遍历每条边生成index并完成刚度矩阵组装 for conn in element_connection.values(): p1, p2 = conn index = np.array(X[p1] + X[p2]) print(index) # 原有刚度矩阵组装逻辑 s = roh.T.dot(c).dot(roh) K[np.ix_(index,index)] += s
输出结果
运行上述代码的print(index)输出完全匹配预期:
[1 2 3 4] [3 4 5 6] [5 6 7 8] [7 8 9 10] [ 3 4 11 12] [ 5 6 13 14] [ 7 8 15 16]
该方案为通用实现,后续新增点、边时仅需维护element_connection和X两个映射表即可,不需要修改核心逻辑。
内容的提问来源于stack exchange,提问作者RAKSHIT SELOT
相关产品推荐
相关产品推荐

