为了账号安全,请及时绑定邮箱和手机立即绑定

处理多个数组

处理多个数组

富国沪深 2023-02-22 17:24:26
我有 6 个数组,名为 , x1,......x6 我从 'npz' 文件中读取。我需要对每个数组执行一些数学运算并将其存储到 10 个新数组中。我正在以一种非常简单的方式逐步进行。要读取文件并存储变量,files = np.load("particle.npz")x1 =  files['x1']x2 = files ['x2']x3 =  files['x3']x4 = files ['x4']x5 =  files['x5']x6 = files ['x6']从前一个数组创建另一个数组,pox1= x1[:,0]pox2= x2[:,0]pox3= x3[:,0]pox4= x4[:,0]pox5= x5[:,0]pox6= x6[:,0]然后创建一些新数组,sq_diff_x1 = np.zeros(40002) sq_diff_x2 = np.zeros(40002)sq_diff_x3 = np.zeros(40002)sq_diff_x4 = np.zeros(40002)sq_diff_x5 = np.zeros(40002)sq_diff_x6 = np.zeros(40002)最后使用 for 循环执行计算并存储到新数组中,for i in range (len(x1)-1):    sq_diff_x1[i] = (pox1[i]-pox1[0])**2    sq_diff_x2[i] = (pox1[i]-pox1[0])**2    sq_diff_x3[i] = (pox1[i]-pox1[0])**2    sq_diff_x4[i] = (pox1[i]-pox1[0])**2    sq_diff_x5[i] = (pox1[i]-pox1[0])**2    sq_diff_x6[i] = (pox1[i]-pox1[0])**2代码工作正常但是有没有其他方法可以通过不一个一个地分配所有内容来自动完成它?因为使用我的方法很简单,但是当我需要处理 100 个数组时会非常耗时。所以需要一些自动化的东西。
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

files = np.load("particle.npz")

x_s = [files[key] for key in files.keys()]

创建数组列表而不是单独命名的数组是 Python 中的首选方法。


pox_s = [x[:,0] for x in x_s]

看起来数组的大小都相同。所以我们可以把列表变成数组:


pox_s = np.array(pox_s)    

甚至


x_s = np.array(x_s)           # (6, 40002, ?)

pox_s = x_s[:,:,0]            # (6, 40002)


sq_diffs = (pox_s - pox_s[:,[0]])**2     # (6, 40002)-(6,1)

没有一个具体的小例子,我无法测试这段代码。我想我的形状是对的。


查看完整回答
反对 回复 2023-02-22
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您基本上需要编写一个额外的循环来遍历字典的键。


files = np.load("particle.npz")

sq_diff_list = []

temp = []

for i in list(files.keys()):

  arr = files[i]

  for x in arr:

    temp.append((x-arr[0])**2)

  sq_diff_list.append(temp)

  temp = []


查看完整回答
反对 回复 2023-02-22
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信