【发布时间】:2020-01-31 22:02:08
【问题描述】:
我正在寻求根据行的第一个元素对数据行进行分箱。
我的数据是这样的:
[[Temperature, value0, value1, ... value249]
[Temperature, ...
]
也就是说:每行的第一个元素是温度值,其余的行是信号的时间轨迹。
我想做一个这种形状的数组:
[Temperature-bin,[[values]
[values]
... ]]
Next Temp.-bin, [[values]
[values]
... ]]
...
]
原始数据数组中的行应在相应温度箱的子数组中排序。
data= np.array([values]) # shape is [temp+250 timesteps,400K]
temp=data[0]
start=23000
end=380000
tempmin=np.min(temp[start:end])
tempmax=np.max(temp[start:end])
binsize=1
bincenters=np.arange(np.round(tempmin),np.round(tempmax)+1,binsize)
binneddata=np.empty([len(bincenters),2])
for i in np.arange(len(temp)):
binneddata[i]=[bincenters[i],np.array([])]
我希望得到一个如上所述的结果数组,其中每一行都由 bin 的平均温度 (bincenters[i]) 和时间轨迹数组组成。 Python 给了我一个关于“用序列设置数组元素”的错误。 我之前可以在另一个脚本中创建这种由不同数据类型组成的数组,但我必须在那里专门定义它,在这种情况下这是不可能的,因为我正在处理数十万行数据的文件.同时,我想使用尽可能多的内置函数和尽可能少的循环,因为我的计算机已经花费了一些时间来处理这种大小的文件。
感谢您的意见,
雷帕克
【问题讨论】:
-
你说的时间轨迹是什么意思?
-
我的意思是一系列值,就像示波器得到的曲线。我想指出,数据文件中的一行具有不同类型的数据,即 250 个值是该示波器曲线的连续片段,然后还有更多不同类型的数字(例如:温度)。
-
您似乎在尝试像使用数据表一样使用 NumPy 数组,但这并不是 NumPy 的最佳用途。您可能会更好地为 bin 和数据使用单独的数组,或者使用
pandas数据框,或者使用字典将 bin 映射到数据,或者使用其他一些数据结构。这将有助于了解您对这个提议的阵列的目标是什么。 -
稍后我想对子数组(分箱数据)做不同的事情。一件事是在每个子阵列中添加所有线并拟合结果曲线,但还要计算箱中的事件,比较子阵列的大小......我还不确定,还有什么,但它将始终在一个子阵列中处理数据,然后将其结果与温度进行比较。
标签: python pandas numpy dataframe sub-array