你不能按照你的方法进行重赋值。在循环内部,elem
变量在每一步都被覆盖了,而原始变量并未改变。
直接使用以下方式即可:
pos = np.array(pos)
vel = np.array(vel)
accel = np.array(accel)
或者采用 @jared 提到的 asarray
方法,如果传入的对象已经是数组,则避免复制:
pos = np.asarray(pos)
vel = np.asarray(vel)
accel = np.asarray(accel)
简化为一行代码:
pos, vel, accel = map(np.asarray, (pos, vel, accel))
如果你确实需要检查类型(在我看来这不是必需的):
def to_numpy(elem):
return elem if isinstance(elem, np.ndarray) else np.array(elem)
pos = to_numpy(pos)
vel = to_numpy(vel)
accel = to_numpy(accel)
最后,如果你有很多变量,建议使用容器来管理:
items = {'pos': pos, 'vel': vel, 'accel': accel}
arrays = {k: np.asarray(v) for k, v in items.items()}