Проблемы с вычислением нормализованного количества итераций с помощью numpy

Вот код, который у меня есть на данный момент:

import numpy as np
def mandelbrot(resol):

    R, I = np.meshgrid(np.linspace(-2,.5,resol), np.linspace(1.25j,-1.25j,resol))
    Z = R + I
    C = np.array(Z)

    iterations = np.zeros(Z.shape, dtype=np.uint8)
    escape_vals = np.zeros(Z.shape, dtype=np.complex128)

    for i in np.arange(MAXITERS):
        #only the complex values that haven't diverged get iterated
        _ = np.abs(Z) <= 2
        Z[_] *= Z[_]; Z[_] += C[_]

        #np.invert(_, _) just toggles all of the boolean values in _
        #So, wherever np.abs(Z) > 2...
        np.invert(_, _)
        iterations[_] = i
        escape_vals[_] = Z[_]

    #Take the last set of points np.abs(Z) > 2,
    #invert it; those are the points in the  Mandelbrot set.
    np.invert(_, _)
    iterations[_] = MAXITERS
    escape_vals[_] = Z[_]

    iterations += 2
    escape_vals *= escape_vals; escape_vals += C
    escape_vals *= escape_vals; escape_vals += C

    moduli = np.array(np.abs(escape_vals), np.float64)
    mus = np.array(iterations - np.log(np.log(moduli))/np.log(2))
    return mus

Моя проблема в том, что я получаю значения модуля от 0 до 1, и когда я беру их дважды, я получаю nan. Я также не уверен, как лучше всего сопоставить эти значения с выбранной мной цветовой палитрой! Кто-нибудь видит мою ошибку?


person Broseph    schedule 10.11.2013    source источник
comment
Ваш код у меня работает нормально ... эти nan кажутся просто точками, которые не входят в набор. plt.imshow, например, по умолчанию nan отображает белый цвет, но вы можете изменить это с помощью замаскированного массива.   -  person askewchan    schedule 11.11.2013
comment
@askewchan, но если модуль небольшой, не означает ли это, что он близок к осям? Как ты так уверен, что нанов нет в комплекте?   -  person Broseph    schedule 11.11.2013
comment
Честно говоря, я не уверен, но когда я запускал ваш код, nans были там же, где и черные области на этом графике   -  person askewchan    schedule 11.11.2013
comment
Ой. Итак, они в комплекте: п. Не все черные части этого изображения должны быть нансами. Черные части должны быть меньше или равны 2 ... Но поскольку я веду двойной журнал, они действительно должны быть между 1 и 2 (1, 2). На самом деле, поскольку я не хочу ничего из конечные значения должны быть неприлично отрицательными, радиус выхода должен быть основой любого журнала, который я беру, а значение точек в наборе должно быть этой базой. Поэтому я переключаюсь на log2 и устанавливаю все точки в установить в конце итераций равным sqrt (2) + sqrt (2) j. Или 2   -  person Broseph    schedule 11.11.2013