qt读取文件内容全部为浮点数的二进制文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt读取文件内容全部为浮点数的二进制文件相关的知识,希望对你有一定的参考价值。

参考技术A 先把二进制数据读到buffer[]字节数组中,然后
float * p = buffer;
printf("%f\n", *p); //打印第一个值
p++; printf("%f\n", *p); //打印第2个值
p++; printf("%f\n", *p); //打印第3个值
。。。

将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数

【中文标题】将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数【英文标题】:Read CSV file to numpy array, first row as strings, rest as float 【发布时间】:2012-09-02 09:46:41 【问题描述】:

我将数据存储在 CSV 中,其中第一行是字符串(列名),其余行是数字。如何将其存储到 numpy 数组中?我能找到的只是如何为列设置数据类型,而不是为行设置数据类型。

现在我只是跳过标题进行计算,但我需要在最终版本中包含标题。但是,如果我将标题保留在其中,则会将整个数组设置为字符串,并且计算会失败。

这就是我所拥有的:

 data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', skip_header=1) 

【问题讨论】:

【参考方案1】:

如果在函数np.genfromtxt 中使用names=True 参数,则可以保留列名

 data = np.genfromtxt(path_to_csv, dtype=float, delimiter=',', names=True) 

请注意dtype=float,它将您的数据转换为浮点数。这比使用dtype=None 更有效,后者要求np.genfromtxt 为您猜测数据类型。

输出将是一个结构化数组,您可以在其中按名称访问各个列。这些名字将取自您的第一行。可能会发生一些修改,例如列名中的空格将更改为_。 documentation 应该涵盖您可能遇到的大多数问题。

【讨论】:

我是这样做的,但它创建了一个没有列的数组。只是将整行存储在一列中 究竟做了什么?你的追溯是什么? 我完全按照你上面的那行代码做了。我不知道什么是回溯。 那么,您能否将您的输入文件的一部分粘贴到 bin 中,以便我们尝试? “一列中的整行”对我来说看起来很奇怪......回溯是您在执行代码后获得的屏幕副本(当它失败时)。 这里是来自解释器的 pastebin,仅使用 genfromtxt 和结果矩阵的前两行。您可以看到数据仅存储在行中,没有列。最后我做了一个 .shape 。 bpaste.net/show/45175【参考方案2】:

当你说你需要最终版本中的标题时,我不确定你的意思,但你可以生成一个结构化数组,其中的列可以通过如下字符串访问:

data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', names=True)

然后使用data['col1_name']data['col2_name'] 等访问列。

【讨论】:

如果需要访问,也可以使用data.dtype.names获取列名。【参考方案3】:

numpy 数组的整体理念是所有元素都是同一类型。将标题读入 Python 列表,并将它们与数字分开管理。您还可以创建结构化数组(记录数组),在这种情况下,您可以使用标题来命名记录中的字段。在这种情况下,将它们存储在数组中将是多余的。

【讨论】:

但是 genfromtxt 函数将数据存储到一个 ndarray 中,并允许为每列选择数据类型。如果有办法按行执行此操作,我会被设置。我的计算函数将数字提取到另一个数组中。如果我可以保留标题,我将能够标记我的输出。 但是您可以保留标题,只是不能将它们直接存储在数组中。所以,继续做吧。将它们存储在数组中将是一个障碍而不是帮助。 所以如果我理解你的方法,你是说声明一个结构数组,其中每个结构包含名称和一个动态数组来保存数字? user545424 的回答更符合我的想法。

以上是关于qt读取文件内容全部为浮点数的二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

qt 读取一个txt文件,把里面的内容已二进制的方式存储到另一个文件里面。

用python从二进制文件中读取32位带符号的ieee 754浮点?

将字节转换为浮点数?

在 Swift 中将半精度浮点数(字节)转换为浮点数

在 SciLab 中将十六进制转换为浮点数

Python如何将浮点数作为十六进制转换为十进制