【发布时间】:2017-02-04 04:56:27
【问题描述】:
我正在从 Matlab 转移到 Python。
在 Matlab 中,我将数据结构化为结构。 我有一些数据要处理以获取新数据集。
例如 我有一些泵的测量值。在特定情况下,可能有 22 分,但这当然因情况而异。
我将 Excel 工作表中的数据按列组织。对于每个数据点,我都有流量 (q)、高度 (h)、扭矩 (torque) 和 rpm (rpm)。我使用 xlrd 读取数据,这工作正常。我用四个键创建了一个字典,其中的值。
有一些缩放规则可用于操作给定的数据集点。在 Matlab 中,我将数据组织在一个名为液压数据的结构文件中,然后会有 4 个向量,即液压数据.q 等。
第一种方法是在 python 中使用 dict。这里的问题是必须定义键的长度,即您不能将数据添加到列表中。
然后我创建了一个空字典。并用长度与输入数据相同的 np.zeros 向量填充。但这似乎对我不起作用。一个简化的函数如下所示。
def test_for_loop(hydraulic_geometric_scaled):
import math
import numpy as np
no_of_points = len(hydraulic_geometric_scaled['q'])
zero_vector = np.zeros(no_of_points)
q = np.zeros(no_of_points)
h = np.zeros(no_of_points)
torque = np.zeros(no_of_points)
rpm = np.zeros(no_of_points)
hydraulic_scaling_max = {}
hydraulic_scaling_max['q'] = zero_vector
hydraulic_scaling_max['h'] = zero_vector
hydraulic_scaling_max['torque'] = zero_vector
hydraulic_scaling_max['rpm'] = zero_vector
rpm_max=6000
for i in range(no_of_points):
omega = hydraulic_geometric_scaled['rpm'][i]/60*2*math.pi
omega_max = rpm_max/60*2*math.pi
hydraulic_scaling_max['q'][i]= hydraulic_geometric_scaled['q'][i]*(omega_max/omega)
hydraulic_scaling_max['h'][i]= hydraulic_geometric_scaled['h'][i]*(omega_max/omega)**2
hydraulic_scaling_max['torque'][i]= hydraulic_geometric_scaled['torque'][i]*(omega_max/omega)**2
hydraulic_scaling_max['rpm'][i]= omega_max*60/2/math.pi
return hydraulic_scaling_max
这会返回一个hydraulic_scaling_max 字典,但每个键的值都相同。在 Matlab 中,这项工作很好,但显然不在这里。然后我和一位同事谈了一点,他建议我应该改用类。
我的问题: 1.在Matlab中使用dict作为结构是错误的方式吗? (我已经搜索过,似乎没有明确的答案)。 2. 为什么所有键的代码都一样? 3. 上课是最好的方式吗?
希望你能把事情弄清楚一点,这样我就可以开始使用 Python 的最佳方式了!
【问题讨论】:
-
您能否澄清一下,“这里的问题是必须定义键的长度,即您不能将数据添加到列表中。”?我不确定你在这里说什么,它可能会帮助我们找到你遇到的问题。
-
@MarkHarley:我很确定他指的是无法调整大小的 numpy 数组
标签: python matlab dictionary