Построение графика

Если вы являетесь not на сервере, но разрабатываете и должны часто перезагружать модуль, вот хороший отзыв.

Сначала сделайте убедитесь, что вы используете превосходную оболочку IPython из проекта Jupyter Notebook. После установки Jupyter вы можете запустить его с помощью ipython или jupyter console или даже лучше jupyter qtconsole, что даст вам красивую раскрашенную консоль с завершением кода в любой ОС.

Теперь в ваша оболочка, введите:

%load_ext autoreload
%autoreload 2

Теперь, каждый раз, когда вы запускаете свой скрипт, ваши модули будут перезагружены.

Помимо 2, существуют другие опции магии автозагрузки :

%autoreload
Reload all modules (except those excluded by %aimport) automatically now.

%autoreload 0
Disable automatic reloading.

%autoreload 1
Reload all modules imported with %aimport every time before executing the Python code typed.

%autoreload 2
Reload all modules (except those excluded by %aimport) every time before
executing the Python code typed.

1
задан Indrajith Ekanayake 3 March 2019 в 13:00
поделиться

1 ответ

Я делаю собственный плоттер (plot0), который записывает непосредственно в выходной поток char за символом, строка за строкой:

private static void plot0(final int... numbers) {

    final int cols = numbers.length;
    final IntSummaryStatistics stat = Arrays.stream(numbers).summaryStatistics();
    final int max = stat.getMax();
    final int min = stat.getMin();

    final int rows;
    if (min < 0) {
        rows = Math.max(0, max) + ~min + 2;
    } else {
        rows = max;
    }

    for (int i = 0; i < rows; i++) {

        final int val = Math.max(0, max) - i;
        if (0 == val) {

            continue; // do not plot zero
        }

        for (int j = 0; j < cols; j++) {

            final int num = numbers[j];
            System.out.print(
                    0 < num && 0 < val && num >= val
                            || 0 > num && 0 > val && num <= val
                                    ? '*'
                                    : ' ');
        }
        System.out.println();
    }
}

Я внес небольшие изменения в ваш код (переименуйте в plot1), но в основном оригинальное мышление работает.

  1. изменить Arrays.deepToString(tempArray[i]) на new String(tempArray[i])
  2. Двумерный массив не может быть напечатан, вместо него использовать строку char
  3. заполнить нулевые значения ' ' в Arrays.fill(tempArray[i], ' ');
  4. отсутствует пропустить значение 0 из печати, базовая линия видна
  5. конец строки после заполнения всех '*' значений, а не до
  6. значения '*' переопределяют [ 1110], поэтому вы не можете писать напрямую на выход.
<час>
private static void plot1(final int... array) {

    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;
    for (final int element : array) {
        if (element > max) {
            max = element;
        }
        if (element < min) {
            min = element;
        }
    }

    if (min < 0) {
        min *= -1;
    }

    final char[][] tempArray = new char[array.length][max + min + 1];

    for (int i = 0; i < tempArray.length; i++) {
        Arrays.fill(tempArray[i], ' ');
        if (array[i] > 0) {
            for (int j = min + 1; j <= min + array[i]; j++) {
                tempArray[i][j] = '*';
            }
        } else if (array[i] < 0) {
            for (int j = min - 1; j >= min + array[i]; j--) {
                tempArray[i][j] = '*';
            }
        }
        System.out.println(new String(tempArray[i]));
    }
}
0
ответ дан rockfarkas 3 March 2019 в 13:00
поделиться
Другие вопросы по тегам:

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