python - 如何按顺序打印3个不同数组的元素?
问题描述
我正在尝试为我的研究项目编写一些代码。我有 3 个不同的数组,它们是x
、y
和z
。这些一起代表属于我的系统的原子的位置。当我开始模拟时,代码会打印每个原子的位置。我可以通过以下代码为 6 原子系统执行此操作:
for i in range(number_of_steps):
x, z = RunMD(0.1, x, z, v_x, v_z, m)
print(num_particles)
print "Ni"
print "Ni", x[0], y[0], z[0]
print "Ni", x[1], y[1], z[1]
print "Ni", x[2], y[2], z[2]
print "Ni", x[3], y[3], z[3]
print "Ni", x[4], y[4], z[4]
print "Ni", x[5], y[5], z[5]
但是,现在我需要研究更多数量的原子。我该如何处理 100 原子系统的打印问题?所有代码都在下面。谢谢
import numpy as np
import math
'''
units: eV / A / ps
'''
def cart_to_polar(x,z):
rho = math.sqrt(x**2 + z**2)
phi = math.atan2(z, x)
return rho, phi
def polar_to_cart(rho, theta):
x = rho * math.cos(theta)
z = rho * math.sin(theta)
return x, z
def GetLJForce(r, epsilon, sigma):
return 48 * epsilon * np.power(
sigma, 12) / np.power(
r, 13) - 24 * epsilon * np.power(
sigma, 6) / np.power(r, 7)
def GetSpringForce(k, radius):
return -1 * k * radius
def GetAcc(x_positions, z_positions, m):
xAcc = [0]*len(x_positions)
zAcc = [0]*len(z_positions)
for i in range(0, len(x_positions)-1):
for j in range(i+1, len(x_positions)):
delta_x = x_positions[j] - x_positions[i]
delta_z = z_positions[j] - z_positions[i]
radius, theta = cart_to_polar(delta_x, delta_z)
if(radius == 0):
radius = 1
force_mag = GetLJForce(radius, 0.84, 2.56) + GetSpringForce(0, radius)
force_x, force_z = polar_to_cart(force_mag, theta)
xAcc[i] += force_x / m[i]
zAcc[i] += force_z / m[i]
force_x, force_z = polar_to_cart(-force_mag, theta)
xAcc[j] = force_x / m[j]
zAcc[j] = force_z / m[j]
return xAcc, zAcc
def UpdatePos(x, v, a, dt):
return x + v*dt + 0.5*a*dt**2
def UpdateVel(v, a, dt):
return v + a*dt
def RunMD(dt, x, z, v_x, v_z, m):
num_particles = len(x)
a_x, a_z = GetAcc(x, z, m)
for i in range(num_particles):
v_x[i] = UpdateVel(v_x[i], a_x[i], dt)
v_z[i] = UpdateVel(v_z[i], a_z[i], dt)
for i in range(num_particles):
x[i] = UpdatePos(x[i], v_x[i], a_x[i], dt)
z[i] = UpdatePos(z[i], v_z[i], a_z[i], dt)
if(z[1], z[2], z[3], z[4], z[5] != 0):
z[1] = 0
z[2] = 0
z[3] = 0
z[4] = 0
z[5] = 0
return x, z
num_particles = 6
m = [1] * num_particles
x = [4, 5, 10, 15, 20, 25]
y = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
z = [5, 0.0, 0.0, 0.0, 0.0, 0.0]
v_x = [0] * num_particles
v_z = [0] * num_particles
v_x[0] = 5
number_of_steps = 100
for i in range(number_of_steps):
x, z = RunMD(0.1, x, z, v_x, v_z, m)
print(num_particles)
print "Ni"
print "Ni", x[0], y[0], z[0]
print "Ni", x[1], y[1], z[1]
print "Ni", x[2], y[2], z[2]
print "Ni", x[3], y[3], z[3]
print "Ni", x[4], y[4], z[4]
print "Ni", x[5], y[5], z[5]
解决方案
你可以试试zip
运营商
for z in zip(arr_1,arr_2,arr_3):
print(*z)
推荐阅读
- groovy - 如何在一个文件中声明一个 Groovy 类并在另一个文件的 Groovy 脚本中使用它?
- scala - 不同类型任务的功能组合 - Scala
- c++ - 如何在不使用 const_cast 的情况下打开 HINSTANCE?
- java - 取消 ScheduledExecutorService 中计划的任务使执行器保持活动状态
- birt - BIRT 报告:第一次报告很慢
- c# - HTTP WSDL 没有出现在 HTTPS WSDL 出现的地方
- ios - 使用随机数访问字典中的值
- tensorflow - rasa nlu ner_crf 未提取任何实体
- android - 将消息正文保存到 SQLite 数据库
- python - python中“cross-env”的对应物是什么?