Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 Wolfram Mathematica: Битовый файл
Есть длинный список натуральных возрастающих чисел (вектор) конечной длины.

Как рационально (минимальные затраты времени на запись нужны) получить средствами Wolfram Mathematica список битов (битовый файл), где адресами единичных битов были бы эти натуральные числа?
Остальные порядковые адреса оставались нулями.

Начальный битовый файл со всеми нулями длиной равной большему числу вектора создан.

Можно формировать битовый файл с одновременными созданием и записью - такого у меня нет.

 Re: Wolfram Mathematica: Битовый файл
Мне кажется, вольфрам не лучшее средство для такого рода задач. Есть ассемблерная инструкция BTS, которая делает ровно то, что нужно.

(Оффтоп)

Удивительно, но MS VisualStudio не поддерживает инлайновый ассемблер x64, ну и дела.

 Posted automatically
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Околонаучный софт»
Причина переноса: тематика вопроса.

 Re: Wolfram Mathematica: Битовый файл
Sender в сообщении #1560681 писал(а):
Мне кажется, вольфрам не лучшее средство для такого рода задач. Есть ассемблерная инструкция BTS, которая делает ровно то, что нужно.

(Оффтоп)

Удивительно, но MS VisualStudio не поддерживает инлайновый ассемблер x64, ну и дела.

Благодарен за ориентацию, но очень желательна работа без выхода из вольфрама даже с не самой большой скоростью реализации по сравнению с другими средствами.

 Re: Wolfram Mathematica: Битовый файл
Можно так:

bits = {2, 3, 5, 7, 11, 13};
bitfile = Table[0, {i, 1, Last[bits]}];
bitfile[[bits]] = 1;
Export["c:\\bitfile.bin", bitfile, "Bit"];


И для проверки

Import["c:\\bitfile.bin", "Bit"]

дает {0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0} - математика дополняет до двух байтов нулями.

 Re: Wolfram Mathematica: Битовый файл
Vince Diesel в сообщении #1560696 писал(а):
Можно так:...

Замечательно!

Премного благодарен!!!

 Запись в большой файли и чтение из него
Можно ли в Mathematica дописывать в файл на жестком диске информацию порциями каждая из которых примерно равна объему оперативной памяти используемого компьютера командой PutAppend (или иной командой) и читать в циклах из этого файла (какой командой?), находящегося на жестком диске, его любые части примерно такого же объема ( каждая читаемая часть умещается в оперативную память)?

Файл на жестком диске должен занимать объем во много сотен раз больший, чем есть оперативная память.

 Posted automatically
 i  Темы объединены.

 Re: Wolfram Mathematica: Битовый файл
Vince Diesel в сообщении #1560696 писал(а):
Можно так:

bits = {2, 3, 5, 7, 11, 13};
bitfile = Table[0, {i, 1, Last[bits]}];
bitfile[[bits]] = 1;
Export["c:\\bitfile.bin", bitfile, "Bit"];


И для проверки

Import["c:\\bitfile.bin", "Bit"]

дает {0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0} - математика дополняет до двух байтов нулями.

Была хорошей подсказкой!

Но потребности изменились и теперь надо записать единичными битами на жесткий диск в один файл (если это возможно) много списков, объем каждого из которых, близок к объему оперативной памяти.

Кроме того надо считывать из этого файла любой отрезок, который по объему меньше оперативной памяти для обработки (изменения содержания) и возврата такого фрагмента в файл в измененном виде уже нулевыми битами.

Числа в списке на запись в файл являются порядковыми номерами адресов битов в файле.

Имеется такая возможность?
Это задача, которую необходимо выполнить средствами Mathematica.

 Re: Wolfram Mathematica: Битовый файл
Аватара пользователя
Воскурение мануалов привело меня к выводам:
а) Mathematica не очень хорошо справляется с битами (в отличие от байтов), и операции с ними поддерживаются лишь в функциях Import и Export, а это не ваш случай, поскольку они работают лишь с файлами целиком;
б) если переформулировать вашу задачу под байты, решение можно найти.

 Re: Wolfram Mathematica: Битовый файл
Aritaborian в сообщении #1569352 писал(а):
если переформулировать вашу задачу под байты, решение можно найти.

Решение необходимо в битах из-за возможности записать большой объем информации.

Задача решается, конечно, путем создания на жестком диске нумерованных по порядку файлов в нужном количестве и близка к завершению.

Работа же с одним расширяемым файлом от первой порции записи битовой информации до объема жесткого диска и корректировки записанной в него информации существенно упрощает программу.
Корректировка записанной информации требует возможности чтения любого фрагмента из файла, не загружая (а его и нельзя загрузить) весь файл в оперативную память.

Пакет Mathematica весьма обширные имеет возможности, неужели с битами не умеет работать в изложенной здесь проблеме?

 Re: Wolfram Mathematica: Битовый файл
Аватара пользователя
Modest2 в сообщении #1569432 писал(а):
Решение необходимо в битах из-за возможности записать большой объем информации.
Мотивация-то ясна.
Modest2 в сообщении #1569432 писал(а):
неужели с битами не умеет работать в изложенной здесь проблеме?
Я пришёл к такому выводу. Возможно, вывод неверен, и кто-то другой подскажет вам что-то рабочее.

 Re: Wolfram Mathematica: Битовый файл
Modest2 в сообщении #1569345 писал(а):
Это задача, которую необходимо выполнить средствами Mathematica.

Хм, подключение внешнего кода средствами Mathematica удовлетворяет этим условиям? Если да, можно написать нужный код на C/C++ и вызывать его с помощью LibraryLink, например.

 Re: Wolfram Mathematica: Битовый файл
Sender в сообщении #1569444 писал(а):
Хм, подключение внешнего кода средствами Mathematica удовлетворяет этим условиям? Если да, можно написать нужный код на C/C++ и вызывать его с помощью LibraryLink, например.

Можно на любом языке, только проблема в их незнании и недостаточном знании используемого. :-(

 Re: Wolfram Mathematica: Битовый файл
Аватара пользователя
Modest2, создайте тему на Mathematica.SE, если ещё не. Также можно спросить в этом ВК-комьюнити, там есть шарящие специалисты.

 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group