想用taichi加速F=ma这个方程的话,F,m,a都是N行3列的,要用for循环展开一行一行的去算,怎么存储这个矩阵,用什么数据格式才是最快的呢

就是类似的问题吧,要把F和M分别预先存成大的矩阵,还是F,M,a的行单独存在一起。新手小白~~!打扰大家了

你可以贴一个纯 Python 的实现不?(比如基于 numpy 的),然后我们可以看看怎么用 taichi 写更好。

来了来了~~差不多是这个意思
import numpy as np
raw=100
xn3=np.zeros([raw, 3])
xn2=np.zeros([raw, 3])
xn1=np.zeros([raw, 3])
drn3=np.zeros([raw, 3])
drn2=np.zeros([raw, 3])
drn1=np.zeros([raw, 3])
P_r=np.zeros([raw, 3])
Q=np.zeros([raw, 3])
M=np.zeros([raw, 3])
f=np.zeros([raw, 3])
m=np.zeros([raw, 1])
IM_inv=np.zeros([raw,3,3])
c1=1
c2=0.9
h2=0.1

for i in range(raw):
for j in range(3):
xn3[i, j] = (2 * xn2[i, j] - c2 * xn1[i, j] + h2 * (P_r[i, j] + f[i, j]) / m[i]) / c1
drn3[i, j] = (2 * drn2[i, j] - c2 * drn1[i, j] + h2 * (
(Q[i, 0] + M[i, 0]) * IM_inv[i, 0, j] + (Q[i, 1] + M[i, 1]) * IM_inv[i, 1, j] + (
Q[i, 2] + M[i, 2]) * IM_inv[i, 2, j])) / c1 #这个是Q(1行3列)加上M(1行三列)乘以IM_inv(3行3列)的意思
print(drn3)

你的这些数组比较大,而且有好几个数组,可以用 ti.typed.ndarray(element_dim=1) 的形式传给 taichi 的 kernel 做计算?

嗯嗯,我试一下