Ошибка значения: недопустимый аргумент RGBA: в colors.py

#python #matplotlib #scikit-learn

#python #matplotlib #scikit-учиться

Вопрос:

Я пытаюсь создать 3D-файл (собственные карты Лапласа) с идеями из https://github.com/zjxi/Manifold-Learning-Algorithms Сначала я определяю файл() следующим образом:

 def le(data_in, dim_out, k=15):
    data_len = len(data_in)
    weight = np.zeros([data_len, data_len], np.float)
    for i in range(data_len):
        knn_dots, distance_list = knn(data_in, i, k)
        # weight[i][knn_dots] = np.exp(-np.square(distance_list[knn_dots]) / (i   1.))
        weight[i][knn_dots] = 1.0
    mat_d = np.diag(np.sum(weight, axis=0))
    mat_l = mat_d - weight
    val, vec = np.linalg.eig(mat_l)
    return np.reshape(vec[np.argsort(val)[:dim_out]], [data_len, dim_out])
 

Затем я использую файл, чтобы рассеять результат:

 def le_plot_3d(data, target):
    Z_LE = Le.le(data, 3)
    ax = Axes3D(plt.figure())
    ax.scatter(Z_LE[:, 0], Z_LE[:, 1], Z_LE[:, 2], c=target, s=60)
    plt.title('LE')
    plt.show()
 

Затем в основном методе я вызываю le_plot_3d(данные, цель) следующим образом :

 import numpy
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import metrics
from sklearn import datasets
import LaplacianEigenmap as Le
import LLE
import numpy as np

def knn(data_in, central_idx, k):
    central_dot, data_len = data_in[central_idx], len(data_in)
    distance_list = np.zeros([data_len], np.float)
    for i in range(data_len):
        distance_list[i] = np.linalg.norm(data_in[i] - central_dot)
    return np.argsort(distance_list)[:k], distance_list

def le(data_in, dim_out, k=15):
    data_len = len(data_in)
    weight = np.zeros([data_len, data_len], np.float)
    for i in range(data_len):
        knn_dots, distance_list = knn(data_in, i, k)
        # weight[i][knn_dots] = np.exp(-np.square(distance_list[knn_dots]) / (i   1.))
        weight[i][knn_dots] = 1.0
    mat_d = np.diag(np.sum(weight, axis=0))
    mat_l = mat_d - weight
    val, vec = np.linalg.eig(mat_l)
    return np.reshape(vec[np.argsort(val)[:dim_out]], [data_len, dim_out])

def le_plot_3d(data, target):
    Z_LE = Le.le(data, 3)
    ax = Axes3D(plt.figure())
    ax.scatter(Z_LE[:, 0], Z_LE[:, 1], Z_LE[:, 2], c=target, s=60)
    plt.title('LE')
    plt.show()

def main():
    data, target = datasets.samples_generator.make_s_curve(1000, random_state=9)
    le_plot_3d(data, target)
if __name__ == '__main__':
    main()
 

Это желаемый результат: хочу разбросать точки, которые я сгенерировал с помощью datasets.samples_generator.make_s_curve, и использовать собственную карту Лапласа для встраивания точек.
LE-3d

Однако я получаю: ValueError: Invalid RGBA argument: masked_array(data=[0.269944 0.j, 0.014625 0.j, 0.341379 0.j, 0.47667557 0.j], mask=False, fill_value=(1e 20 0j))

в matplotlibcolors.py …Теперь я не могу отладить недопустимый аргумент RGBA, потому что я не понимаю, что вызывает ошибку.Мой список env выглядит следующим образом:

  • numpy==1.16.3
  • scikit-learn==0.21.2
  • Matplotlib==3.1.0
  • python==3.6

Комментарии:

1. что такое цель? можете ли вы привести пример того, как ваша функция выходит из строя?

2. функция только в main()