gpt4 book ai didi

具有无法预定义的替代长度的 Python (NumPy) 数组

转载 作者:行者123 更新时间:2023-11-30 23:13:39 25 4
gpt4 key购买 nike

我目前正在编写一个数值Python代码(从头开始)来解决以下思想问题:

想象一下,我有一个 2D 问题,其中有一个刚性地面,其上有一个柔性层,该柔性层通过等距间隔的 Spring 连接到地面。在柔性层的顶部有一个圆柱体,它(如果您愿意)粘在柔性层的边缘。现在,圆柱体以多次增量水平滚动,从而从边缘开始打开 Spring 。

现在我的问题涉及以下内容;由于组合 Spring 力和施加到气缸上的力矩之间的平衡,一定数量的 Spring 将在平衡时打开。由于问题的非线性,打开 Spring 的数量事先是未知的。此外,我不希望对整个几何形状进行建模,而是仅考虑相关的打开 Spring 。例如,在此过程中,我希望将与特定力矩增量对应的每个打开的 Spring 中的合力存储起来。

<小时/>

因此,在我看来,这里的编程问题是:

  • 创建一个力数组,其中包含每个增量的各个 Spring 中所有力的列表。复杂性源于以下事实:该列表没有预定义的长度,而且每个数字增量的长度也不同。请注意,在这种情况下,增量的数量是通过例如 linspace
  • 预定义的
<小时/>

我一直在寻找一个合适的Pythonic解决方案来解决这个问题,但还没有找到。我认为 NumPy 库应该提供一个方便的解决方案,但我缺乏 Python 经验,也没有找到一个很好的例子。如果您认为上述设置更方便,我也愿意接受其他方法。

目前,我有以下代码示例来展示我的方法:

from numpy import array , zeros , linspace

area = 2.0
Forces = [] # Initialize complete Force array

for inc in range(1,4):
stresses = linspace(0.,10.,inc)
n = len(stresses)
Forcej = zeros( n ) # Initialize Forces in current increment

for i, stress in enumerate(stresses):
Forcej[i] = area*stress

print Forcej
Forces.append(Forcej)


print Forces

哪些输出:

[ 0.]
[ 0. 20.]
[ 0. 10. 20.]
[array([ 0.]), array([ 0., 20.]), array([ 0., 10., 20.])]

我想这是期望的结果,但我认为这远不是最优雅的解决方案,有人可以帮助或评论这个例子吗?已经感谢您考虑我的问题。

最佳答案

说实话,我建议使用完整的数组,因此每个 Spring 有一列。与 numexpr ( https://code.google.com/p/numexpr ) 模块相结合,可以非常轻松快速地在每个时间步提取所有“事件” Spring 。

我之所以相信完整数组是可行的方法,是因为它很好地映射了底层系统如何处理内存访问。因此,除非 Spring 数量很大(例如 >100000),否则我相信拖动大量零不会降低性能。另一种选择可能是寻找有效的稀疏矩阵。我知道 SciPy 支持它。我不确定您从问题中获得的矩阵“轮廓”是否非常适合稀疏矩阵。

关于具有无法预定义的替代长度的 Python (NumPy) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29207920/

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