我知道如何使用 NumPy 的 np.fromfile()
函数在 Python 中读取二进制文件。我面临的问题是,当我这样做时,该数组具有 10^100 左右的非常大的数量,具有随机 nan
和 inf
值.
我需要将机器学习算法应用于此数据集,但我无法使用此数据。由于 nan
值,我无法规范化数据集。
我试过 np.nan_to_num()
但这似乎不起作用。这样做之后,我的最小值和最大值分别在 3e-38 和 3e+38 之间,所以我无法对其进行归一化。
有什么方法可以缩减这些数据吗?如果不是,我该如何处理?
谢谢。
编辑:
一些上下文。我正在研究恶意软件分类问题。我的数据集由实时恶意软件二进制文件组成。它们是 .exe、.apk 等类型的文件。我的想法是将这些二进制文件存储为一个 numpy 数组,转换为灰度图像,然后对其进行模式分析。
最佳答案
如果您想从二进制文件中生成图像,您需要将其作为整数而不是 float 读入。目前,最常见的图像格式是无符号 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))
在上面,我们使用 OpenCV 库将整数写入 PNG 文件。可以使用其他几个成像库中的任何一个。
bash
的前 10,000 个字节“看起来”像这样:
关于python - 如何使用 NumPy 在 Python 中读取二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39762019/