迭代到一个 numpy 列表

问题描述

我一直在环顾四周,但在理解代码中的错误时仍然遇到问题。我正在尝试获取大小(numstep,N,3)的 pos_list 数组中列出的 get_pos 值。 get_pos 的值显然检查为 numstep,N,3 但当我在底部调用 pos_list 时,它只打印出最后一个值。有什么我遗漏的吗?

 def get_pos(p_list,N):
    sys_position = np.zeros([N,3])
    for i in range(N):
        sys_position[i] = p_list[i].pos
        
    return sys_position

 pos_list = np.zeros([numstep,3])

 for num in range(numstep):
     # Update particle position
     update_pos(p_list,dt,N)
        
     # Update force
     force_new = get_force(p_list,N)

     # Update particle veLocity by averaging
     # current and new forces
     update_vel(p_list,0.5*(force+force_new),N)
        
    # Re-define force value
        force = force_new
        # Increase time
        time += dt
                                                                     
        print(get_pos(p_list,N))

        # Append information to data lists
        pos_list = get_pos(p_list,N)
     
        
    print(pos_list)


任何帮助将不胜感激我一直盯着这个太久了。

编辑:附加get_pos;列出位置数组的函数调用 get_pos 为我获取时间 t 的位置数组,范围为 (0,numstep)。

解决方法

从它的外观来看,pos_list 正在被 get_pos 函数返回的任何内容覆盖,因此在循环的第一次迭代后不再是 numpy 数组。

编辑:

pos_list = get_pos(p_list,N)pos_list 返回的 2D numpy 数组覆盖整个 get_pos(p_list,N) 3D numpy 数组。

要将 get_pos 中的 2D numpy 数组附加到 3D 数组,请在指定的索引处使用 pos_list[num,...] = get_pos(p_list,N)。返回的二维数组将记录在 num 指向的行上,前提是二维数组与 3D 数组的形状相同,但不包括 3D 数组的第一列。