Как сделать список для смещения в numpy?
Как с помощью numpy создать сразу список для смещения, а не смещать по одному значению? Когда я делаю вот так:
# Эта часть считает блоки (байты)
while block_offset < file_size:
myfile.seek(block_offset,0)
block_size = np.fromfile(myfile, dtype=dt_block, count=1)
block_offset = block_offset + block_size[0][0]
block_offset_list.append(block_offset)
# Эта часть создает для каждого блока строго говоря 'имя','смещение' и что это такое
blocks_dtype = np.dtype(dict(
#names=['data_file_1','data_file_3000'], # закавычил как сейчас это выглядит
names=['data_file'],
#offsets=[140,3000],
offsets=[140:3000], # так часть которая нужна 140,141 и т.д. до 3000
#formats=['i','i']
formats=['i']
Выдает такую ошибку:
offsets=[140:3000],
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
В этой части собираются значения
for i in range(len(block_offset_list)-1):
myfile.seek(block_offset_list[i],0)
data_array = np.fromfile(myfile, dtype=blocks_dtype, count=1)
P.S. Пробовал еще задать список, но потерпел фиаско:
blocks_dtype = np.dtype(dict(
names=['data_file'],
offsets=list(140:3000),
formats=['i']
)) #
blocks_dtype = np.dtype(dict(
ValueError: 'names', 'formats', 'offsets', and 'titles' dict entries must have the same length
и
offsets.tolist()
AttributeError: 'list' object has no attribute 'tolist'
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
А чем вам не нравится простой кортеж из чисел (можно использовать и список, но для объектов, которые не планируется потом пополнять лучше использовать кортеж)?
offsets=(140,3000)
Потом можно использовать так, если я правильно понял ваш код:
for offset_begin,offset_end in block_offset_list:
myfile.seek(offset_begin, 0)
data_array = np.fromfile(myfile, dtype=blocks_dtype, count=offset_end-offset_begin)
Я тут в цикле сразу распаковываю кортежи в две переменные, в питоне это очень удобно делается.