如何创建包含24位整数的Numpy数据类型?

2024-10-01 17:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二进制文件,它的记录结构是400个24位有符号的大头整数,后面跟着一个16位的大端有符号短整数。我想做的是:

from numpy import dtype , fromfile
record_dtype = dtype([('samples','>i3',(400,)),('marker','>i2')])
data = fromfile('binary_file.dat',dtype=record_dtype)

不幸的是我得到的是:

^{pr2}$

响应“>;i3”。如何定义数据类型以读取24位二进制数?在


Tags: 文件fromimportnumpy记录二进制符号整数
1条回答
网友
1楼 · 发布于 2024-10-01 17:39:28

我有一个24位四通道PCM中的TB文件。在

我当然不想碰任何东西,除了我一次想要的那一部分,所以我就这样做了:

import numpy as np
from numpy.lib.stride_tricks import as_strided

rawdatamap = np.memmap('4ch24bit800GBdatafile.pcm', dtype=np.dtype('u1'),mode='r')

# in case of a truncated frame at the end
usablebytes = rawdatamap.shape[0]-rawdatamap.shape[0]%12

frames = int(usablebytes/12)
rawbytes = rawdatamap[:usablebytes]

realdata = as_strided(rawbytes.view(np.int32), strides=(12,3,), shape=(frames,4))

someusefulpart = realdata[hugeoffset:hugeoffset+smallerthanram]&0x00ffffff

这从文件复制了一个内存长度为smallerthanram字节的文件。在

注意这个问题!您需要它来切掉32位单词中最重要的字节—这将是属于上一个示例的垃圾。在

您也可以将其应用于:

^{pr2}$

虽然有点乱,但目前还是不错的。在

实际上,您可能需要64位系统来实现这一点。在

注意。这是小端数据。要处理big-endian,可以在视图中使用big-endian数据类型,并将...&0x00ffffff替换为...&ffffff00>>8

相关问题 更多 >

    热门问题