如何在循环中存储每次迭代生成的numpy.ndarrays并按z_value调取
实现按z_value查询数组的简单方案
用Python自带的字典就能搞定,不用复杂操作。你可以把字典理解成贴了标签的收纳盒,z_value就是标签,把对应数组放到对应标签的盒子里,要调取的时候直接找对应标签就行,完全符合你的调用需求。
具体实现步骤
- 循环前先初始化存储用的空字典
这里我们直接初始化三个字典,分别对应你要存的x_c、y_c、z_c三个数组,调用的时候和你想要的形式几乎一致:
import numpy as np # 三个字典的键都是z_value,值是对应迭代生成的numpy数组 x_c = {} y_c = {} z_c = {}
- 修改你的循环代码,把数组存入对应位置
只需要改最后三行赋值的代码即可,原有计算逻辑完全不变:
for z_value in np.arange(0, 5, 1): ms.set_current_mesh(0) planeoffset : float = z_value ms.compute_planar_section(planeaxis = 'Z Axis', planeoffset = planeoffset) m = ms.current_mesh() matrix_name = m.vertex_matrix() # 把当前z_value作为键,存入对应数组 x_c[z_value] = matrix_name[:,0] y_c[z_value] = matrix_name[:,1] z_c[z_value] = matrix_name[:,2]
- 调取方法
你要获取z_value=2的x_c数组,直接写x_c[2]即可,和你期望的x_c @ z_value = 2逻辑完全一致,只是Python的索引语法用方括号[]而已:
# 示例:调取z_value=2对应的三个数组 target_x = x_c[2] target_y = y_c[2] target_z = z_c[2]
可选优化:用单个字典存储所有数据
如果你觉得三个字典太零散,也可以用一个字典存对应z_value的所有三个数组,调取更方便:
# 初始化单个存储字典 mesh_section_data = {} # 循环内存储逻辑 for z_value in np.arange(0, 5, 1): # 原有计算逻辑不变 ms.set_current_mesh(0) planeoffset : float = z_value ms.compute_planar_section(planeaxis = 'Z Axis', planeoffset = planeoffset) m = ms.current_mesh() matrix_name = m.vertex_matrix() # 把三个数组打包存入对应z_value的位置 mesh_section_data[z_value] = (matrix_name[:,0], matrix_name[:,1], matrix_name[:,2]) # 调取的时候直接一次性解包三个数组 x_2, y_2, z_2 = mesh_section_data[2]
新手实用小提示
- 忘记自己存了哪些
z_value的时候,运行print(x_c.keys())就能输出所有已存储的z值 - 哪怕你的
z_value是小数(比如0.5、1.2这类)也可以直接当键用,调取的时候写对应小数即可,比如x_c[0.5]
内容的提问来源于stack exchange,提问作者niallmitchell
相关产品推荐
相关产品推荐

