Как я могу сохранить очень большую разреженную матрицу MATLAB к текстовому файлу?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

16
задан AlessioX 3 April 2016 в 20:53
поделиться

6 ответов

Я сохранил его как текст с помощью Java в MATLAB. Код MATLAB:


pw=java.io.PrintWriter(java.io.FileWriter('c:\\retail.txt'));
line=num2str(0:size(data,2)-1);
pw.println(line);
for index=1:length(data)
    disp(index);
    line=num2str(full(data(index,:)));
    pw.println(line);
end
pw.flush();
pw.close();

Здесь data чрезвычайно большая разреженная матрица.

3
ответ дан 30 November 2019 в 16:14
поделиться

Можно использовать, находят для получения индекса & векторы значения:

[i,j,val] = find(data)
data_dump = [i,j,val]

можно воссоздать данные из data_dump с spconvert, который предназначен для "Импорта из внешнего формата разреженной матрицы" (таким образом, я предполагаю, что это - хороший формат экспорта):

data = spconvert( data_dump )

можно сохранить к ASCII с:

save -ascii data.txt data_dump

, Но это выводит индексы как дважды, можно выписать его более приятно с fopen/fprintf/fclose:

fid = fopen('data.txt','w')
fprintf( fid,'%d %d %f\n', transpose(data_dump) )
fclose(fid)

Hope это помогает.

28
ответ дан 30 November 2019 в 16:14
поделиться

Сохраните разреженную матрицу как .mat файл. Затем в другой программе пользуйтесь подходящей библиотекой для чтения .mat файл.

, Например, если другая программа записана в Python, можно использовать эти scipy.io.mio.loadmat функция, которая поддерживает разреженные массивы и дает Вам редкую numpy матрицу.

7
ответ дан 30 November 2019 в 16:14
поделиться

Вы пытались делить его?

я имею в виду попытку, называющую полным () на 1 000 первых строк (или 5000), и затем повторяю процесс, если это работает.

2
ответ дан 30 November 2019 в 16:14
поделиться

Используйте эти find функция для получения индексов ненулевых элементов...

idcs = find(data);
vals = data(idcs);
...save the index vector and value vector in whatever format you want...

, Если Вы хотите, можно использовать ind2sub для преобразования линейных индексов в строку, нижние индексы столбца.

, Если необходимо воссоздать разреженную матрицу в matlab от нижних индексов + значения, используйте spconvert.

1
ответ дан 30 November 2019 в 16:14
поделиться

Если бы это - в значительной степени одно соглашение времени, то я просто выполнил бы итерации через матрицу и записал бы матрицу в ASCII-файл грубой силой или иначе использование Veynom предложение и назвал бы полным () на подмножестве строк. Это может требовать времени, но это будет, вероятно, сделано быстрее, чем это могло бы взять, чтобы изучить, как читать в .mat файле за пределами среды MATLAB.

, Если бы это - что-то, которое необходимо сделать на повторяющейся основе, тогда я взял бы совет Vebjorn и пользовался бы библиотекой для чтения .mat файла.

0
ответ дан 30 November 2019 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: