首页 > 解决方案 > 处理多个数组

问题描述

我有 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 个数组时会非常耗时。所以需要一些自动化的东西。

标签: pythonnumpy

解决方案


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)

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


推荐阅读