如何使用NumPy在Python中读取二进制文件?

Suy*_*tty 4 python numpy machine-learning data-mining

我知道如何使用NumPy的np.fromfile()函数在Python中读取二进制文件.我面临的问题是,当我这样做时,数组的数量非常大,大约为10 ^ 100左右,具有随机值nan和inf值.

我需要将机器学习算法应用于此数据集,我无法使用此数据.由于nan值,我无法规范化数据集.

我尝试过,np.nan_to_num()但似乎没有用.这样做之后,我的最小值和最大值分别为3e-38和3e + 38,所以我无法将其标准化.

有没有办法缩小这些数据?如果没有,我应该如何处理?

谢谢.

编辑:

一些背景.我正在研究恶意软件分类问题.我的数据集由实时恶意软件二进制文件组成.它们是.exe,.apk等类型的文件.我的想法是将这些二进制文件存储为numpy数组,转换为灰度图像,然后对其执行模式分析.

Joh*_*024 12

如果要从二进制文件中创建图像,则需要以整数形式读取,而不是浮点数.目前,最常见的图像格式是无符号8位整数.

举个例子,让我们从/ bin/bash的前10,000个字节中创建一个图像:

>>> import numpy as np
>>> import cv2
>>> xbash = np.fromfile('/bin/bash', dtype='uint8')
>>> xbash.shape
(1086744,)
>>> cv2.imwrite('bash1.png', xbash[:10000].reshape(100,100))
Run Code Online (Sandbox Code Playgroud)

在上面,我们使用OpenCV库将整数写入PNG文件.可以使用任何其他几个成像库.

这就是bash"看起来" 的前10,000个字节:

在此输入图像描述

  • 这有效!我正在读取二进制文件作为浮动,这导致错误.我把它读作uint8,它工作正常.谢谢 (2认同)