матрица NumPy не функционирует, как предполагалось - PullRequest
0 голосов
/ 28 августа 2018

Это мой код:

import random
import numpy as np
import math

populacao = 5
x_min = -10
x_max = 10
nbin = 4

def fitness(xy, populacao, resultado):

    fit = np.matrix(resultado)

    xy_fit = np.append(xy, fit.T, axis = 1)

    xy_fit_sorted = xy_fit[np.argsort(xy_fit[:,-1].T),:]
    return xy_fit_sorted


def codifica(x, x_min, x_max,n):
    x = float(x)
    xdec = round((x-x_min)/(x_max-x_min)*(2**n-1))
    xbin = int(bin(xdec)[2:])
    return(xbin)


xy = np.array([[1, 2],[3,4],[0,0],[-5,-1],[9,-2]])
resultado = np.array([5, 25, 0, 26, 85])

print(xy)
xy_fit_sorted = np.array(fitness(xy, populacao, resultado))
print(xy_fit_sorted)

parents = (xy_fit_sorted[:,:2])

print(parents)

Проблема, с которой я столкнулся, состоит в том, чтобы выбрать 2 строки "xy_fit_sorted", я делаю эту странную вещь:

родителей = (xy_fit_sorted [:,: 2])

В моем понимании есть смысл:

родители = (xy_fit_sorted [: 1,:])

как будто вся матрица в одной строке.

1 Ответ

0 голосов
/ 28 августа 2018

Я не уверен, что делает большая часть вашего кода, так что это всего лишь предположение: вас отбрасывает форма xy_fit_sorted, являющаяся (1, 5, 3), имеющая лишнюю нулевую ось?

Это можно исправить, например, путем построения xy_fit без использования np.matrix:

xy_fit = np.append(xy, resultado[:, np.newaxis], axis=1)

Затем xy_fit_sorted выходит с формой (5, 3).

Основная проблема заключалась в том, что np.matrix всегда является двумерным массивом. При индексировании xy_fit[...] вы собираетесь индексировать вектором. Но используя np.matrix для xy_fit, xy_fit[:,-1].T - это не вектор, а также двумерный массив (формы (1,5)). Это приводит к тому, что xy_fit_sorted также имеет дополнительное измерение.

Обратите внимание, что в любом случае numy doc говорит о np.matrix:

Больше не рекомендуется использовать этот класс, даже для линейной алгебры. Вместо этого используйте обычные массивы. Класс может быть удален в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...