处理多个阵列

2024-09-30 22:14:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我从“npz”文件中读取了6个名为x1,…x6的数组。我需要对每个数组执行一些数学运算,并将其存储到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个数组时,这将非常耗时。所以需要一些自动化的东西


Tags: 文件npzerossqdifffiles数组npz
2条回答
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)

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

您基本上需要编写一个额外的循环来迭代字典的键

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 = []

相关问题 更多 >