Как сохранить матрицу типа double в файле - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно создать случайную матрицу типа double (Словарь) и сохранить ее в файл, чтобы я мог прочитать их позже в другой программе.вот как я генерирую данные: (ОК, я сделал одно окончательное редактирование, и теперь каждый элемент сохраняется в файл после того, как он был сгенерирован в цикле. Но есть ошибка из-за того, что fopen небезопасен!)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

/* Number of columns and rows in dictionary */
#define M (2000)
#define N ((int)(M/2))

/* Sign function */
double sign(double x) { return (x >= 0) - (x<0); }

/* Matrix indexing convention */
#define id(m, n, ld) (((n) * (ld) + (m)))


FILE *out_file = fopen("name_of_file", "w"); // write only

int main()
{
    double *D;
    double norm = sqrt(N), a;
    int MN = M*N, m, n;

    /* Initialize srand */
    srand(time(NULL));

    /* Initialize dictionary */
    D = (double*)malloc(MN * sizeof(D[0]));
    if (D == 0)
    {
        fprintf(stderr, "!host memory allocation error(dictionary)\n");
        return EXIT_FAILURE;
    }
    for (n = 0; n < N; n++)
    {
        for (m = 0; m < M; m++)
        {
            a = sign(2.0*rand() / (double)RAND_MAX - 1.0) / norm;
            D[id(m, n, M)] = a;
            fprintf(out_file, "%lf ", D[id(m, n, M)]);
        }
    }
}

Как я могу сохранить D в файле, чтобы потом загрузить его в другую программу для оптимизации?Я использую Visual Studio 2017.

1 Ответ

0 голосов
/ 16 октября 2018

Определите указатель типа FILE, который принимает строку (имя файла) и режим типа (w = запись, a = добавление, r = чтение).Обведите матрицу и используйте fprintf

FILE *out_file = fopen("name_of_file", "w"); // write only

for (n = 0; n < N; n++)
{
    for (m = 0; m < M; m++)
    {
        fprintf(out_file,"%lf ", D[n][m]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...