这是my last one关于编写高效python程序的后续问题。我一直在玩编写我自己的物理模拟,并希望摆脱使用十亿类和方法。你知道吗
所以我希望能够对数据集进行计算。这是我的最新尝试:
particles = np.array([ #position, last position, velocity, mass, size
[[200,0],[200,200],[5,5],10,15], \
[[210,210],[210,210],[8,2],20,25],\
[[215,215],[195,195],[5,3],5,15], \
[[192,186],[160,160],[10,-4],30,30]])
def moveParticles(part, dt):
part[0] = part[1]
part[1] += np.multiply(part[2],dt)
我尝试将每个粒子的每个属性存储在一个数组中,然后在适当的位置更新它们。这里我尝试用时间步长乘以速度向量,然后把它加到位置向量上。这对我来说似乎是一种自然的表达方式,但它给了我一个错误:
TypeError: can't multiply sequence by non-int of type 'float'
我能把数据写回同一个数组吗?我该怎么做呢?你知道吗
我一直在四处阅读,看了numpy的矢量化函数、itertools、map()等。。。但我该如何将结果放回原始数组中呢?你知道吗
或者在覆盖原始数组之前使用中间数组来存储结果是唯一的方法吗?你知道吗
我认为,您只是以错误的方式调用例程(可能是将其传递给整个粒子数组,而不是仅传递一个粒子的数组)。你知道吗
无论如何,另一种可能的解决方案是将数组拆分为单个数组:
这将对
pos
和lastpos
进行就地替换。为了移动粒子,您必须调用以下函数:我设置dt=1。我还假设您想要浮点坐标,如果不是,则应该生成整数数组。你知道吗
相关问题 更多 >
编程相关推荐