Ошибка несовместимых размеров mplot3d python

Я пытаюсь построить 2D-массив в 3D с помощью python mplot3d, однако получаю сообщение об ошибке о несовместимых размерах по оси 1. Я просмотрел другие вопросы, ответы на которые предлагали использовать meshgrid, но я уже использую это и все еще получаю ошибку Диапазоны X и Y также умножаются на количество значений Z. вот мой код:

def view_3d(map3d):
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    X = []
    Y = []
    Z = []
    for wid in range(len(map3d)):
        X.append(wid)
        for hi in range(len(map3d[wid])):
            if wid is 0:
                Y.append(hi)
            Z.append(map3d[wid][hi])
    print(len(X), len(Y), len(Z))
    X = np.array(X)
    Y = np.array(Y)

    X2, Y2 = np.meshgrid(X, Y)
    Z = np.array(Z)
    print(len(X2),len(Y2),len(Z))
    print(len(X2[0]), len(Y2[0]))
    surf = ax.plot_surface(X2, Y2, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
            linewidth=0, antialiased=False)

    ax.zaxis.set_major_locator(LinearLocator(10))
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

    fig.colorbar(surf, shrink=0.5, aspect=5)

    plt.show()

Переданный массив 2d (map3d) имеет длину 566 на 566

Операторы печати были просто для подтверждения длины массивов

Ошибка:

Traceback (most recent call last):
  File "__init__.py", line 199, in <module>
    view_3d(map_results)
  File "__init__.py", line 163, in view_3d
    linewidth=0, antialiased=False)
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1564, in plot_surface
    X, Y, Z = np.broadcast_arrays(X, Y, Z)
  File "C:\Python27\lib\site-packages\numpy\lib\stride_tricks.py", line 101, in broadcast_arrays
    "incompatible dimensions on axis %r." % (axis,))
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.

Ссылка на диск Google с кодом и изображениями, необходимыми для запуска кода и просмотра ошибки, приведена ниже: https://drive.google.com/folderview?id=0B2ssDQewnhReWGJZYXZRSXNxRFU&usp=sharing

Любая помощь приветствуется, спасибо


person tht13    schedule 12.01.2015    source источник
comment
Пожалуйста, предоставьте данные для воспроизведения ошибки. Вы бы хотя бы написали сообщение об ошибке. В противном случае вам будет очень трудно помочь.   -  person hitzg    schedule 12.01.2015
comment
Я добавил ссылку на код и ошибку, которая произошла   -  person tht13    schedule 12.01.2015


Ответы (1)


Ваш массив Z должен иметь ту же форму, что и X2,Y2, чтобы plot_surface работал. Поэтому я изменил строку

Z = np.array(Z)

to

Z = np.array(Z).reshape(Y.size,X.size)

и это сработало!

person plonser    schedule 12.01.2015