gpt4 book ai didi

python - 从类元素中创建 python 列表的副本

转载 作者:太空宇宙 更新时间:2023-11-03 21:05:18 27 4
gpt4 key购买 nike

我正在编写一个脚本,用于处理有限元分析 (FEA) 的多个节点的计算应变/变形。对于不同的正输入扭矩有多种解决方案。我想推断这些数据并模拟负扭矩的结果。在此过程中,原始数据会发生变化。

由于我们没有直接更改任何原始值,因此我认为必须通过推断 FEA 的函数通过引用来访问它。我一直在尝试copy.deepcopy,但通过多个线程发现这不会复制类结构。在 other threads it was recommended to inherit但我正在努力使其适应我的情况。

以下代码位于包含对象同一半径上的所有节点的类内部。所有节点都位于按角度排序的 self._nodes 列表中。每个节点都有所有扭矩级别的应变。

class RadialNodeContainer:
def __init__(self, radius):
self._r = radius
self._nodes = []
def compute_negatives_radial_container(self): # ... see below

class Node:
def __init__(self, node_id, x, y, z,
strain_0nm, strain_100nm, strain_204nm, strain_369nm):
self._coordinate = Coordinate(x, y, z)
self._torque_levels = [strain_0nm, strain_100nm,
strain_204nm, strain_369nm]
def get_all_strains_complete(self):
return copy.deepcopy(self._torque_levels)

class Strain:
def __init__(self, torque_nm, exx, exy, eyy):
self._torque = torque_nm
self._exx = exx
self._exy = exy
self._eyy = eyy

导致原始数据发生不必要的更改的函数:

def compute_negatives_radial_container(self):
points_per_360deg = len(self._nodes)
jj = points_per_360deg
corresponding_node_strains = None
for ii in range(points_per_360deg):
jj -= 1
# Mistake is expected below here
corresponding_node_strains = copy.deepcopy(
self._nodes[jj].get_all_strains_complete())
for kk in range(len(corresponding_node_strains)):
torque = corresponding_node_strains[kk].get_torque_level()
if torque != 0:
exx, exy, eyy = corresponding_node_strains[kk].get_raw_strains()
calculated_negative_strain = Strain(torque_nm=-torque,
exx=exx,
exy=-exy,
eyy=eyy)
self._nodes[ii].add_torque_level(calculated_negative_strain)

我想到创建应变元素列表的深层复制(Node -> self._torque_level)。最初这个列表看起来像[Strain(0Nm), Strain(100Nm), ...]。但我无法理解必须修改代码的哪些部分才能允许传递类实例的副本。

最佳答案

详细说明一下。如果我有时间,我会对此进行扩展,这正是 OP 正在寻找的内容。

我还建议对数组使用 numpy 而不是列表,因为 mumpy 更快。

class Strain:
def __init__(self, torque_nm, exx, exy, eyy):
self._torque = torque_nm
self._exx = exx
self._exy = exy
self._eyy = eyy
self._neg = False

def setNeg(self, neg):
self._neg = neg

@propery
def torque(self):
return _torque if not self._neg else -self.torque

@propery
def exx(self):
return _exx

@propery
def exy(self):
return _exy if not self._neg else -self._exy

@propery
def eyy(self):
return _eyy

关于python - 从类元素中创建 python 列表的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55448124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com