【问题标题】:Manipulating a list of numbers into columns or separate lists for plotting in Python将数字列表操作成列或单独的列表以在 Python 中绘图
【发布时间】:2017-10-24 00:11:48
【问题描述】:

我对 Python 还很陌生,所以如果这个很简单,我很抱歉。 (对我来说似乎很容易,但我很挣扎......)

我有一个从吉时利 SMU 2400 上从我完成的 IV 扫描中返回的数字列表,结果列表的顺序如下:

[v0, c0, t0, v1, c1, t1, v2, c2, t2, ...]

该列表似乎是一个数字列表(不是 ascii 值列表,这要归功于 PyVisa 的 query_ascii_values 命令)。

如何将它们解析为数字列(用于 csv 或类似的输出)或三个单独的列表以在 matplotlib 中绘图。

我喜欢的输出最终会与此类似:

volts = [v0, v1, v2, v3...]
currents = [c0, c1, c2, c3...]
times = [t0, t1, t2, t3...]

这应该可以更轻松地在 matplotlib 中绘图(或输出到 csv 文本文件)。

请注意,我的 v0、v1 等只是我的名字,它们目前是数字。

我会在 Matlab 中进行类似的尝试:

volts = mydata(1:3:length(mydata));

(通过从 1 开始每隔三个项目计数来调用索引)

感谢您的想法和帮助!另外 - 有没有像这样的简单数据处理的好资源,我应该得到一份副本?

【问题讨论】:

  • 试试:A[::3]A[1::3]A[2::3],其中A是输入列表。
  • 哦,伙计,这似乎是一个非常简单的解决方案!让我看看它是否有效......
  • @Divakar 你能把它放在我的问题的快速回答中,这样我就可以检查你的解决方案并给你信用!效果很好!!

标签: python list numpy matplotlib


【解决方案1】:

如果您想保留一份清单,那么 Divakar 的解决方案效果很好。但是,如果您稍后要进行分析和绘图,那么您确实希望使用 numpy 数组,这使您想做的事情更加容易。

要将其放入 numpy 数组中,您可以这样做:

>>> import numpy as np
>>> 
>>> mydata = np.array(mydata)

要将其转换为单个变量,您可以这样做:

>>> volts, currents, times = mydata.reshape(-1,3).T

这将重塑为 Nx3 数组,然后将其转置为 3xN 数组,然后将每一行放入一个单独的变量中。这样做的一个优点是它非常快,因为只创建了一个数组,这与需要创建 4 个列表的列表方法不同(特别是如果您将数据直接放入一个 numpy 数组中)。

您也可以使用 Divakar 用于列表的相同方法,再次避免创建额外的列表。

话虽如此,我强烈建议您研究一下熊猫。这将使跟踪这样的数据更加更容易。您可以用信息名称标记数组的列,这意味着您不需要将这样的数据拆分为三个变量来跟踪它。

【讨论】:

  • 这是一个非常好的观点——尤其是对于 Pandas。我正在慢慢学习这些东西,并且肯定会进入 matplotlib 等,所以我也将使用你的答案。谢谢你的建议!非常感谢您抽出时间在这里讨论这个问题!
【解决方案2】:

只需切片即可。因此,使用A 作为输入列表,我们将有 -

volts, currents, times = A[::3], A[1::3], A[2::3]

【讨论】:

  • 效果很好!!我很高兴我问了,Divakar,谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-12-04
  • 2021-04-01
  • 1970-01-01
  • 2021-10-07
  • 2018-11-28
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多