这是我的代码:
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)
我遇到的问题是选择两行“ xy_fit_sorted”,我正在做这个奇怪的事情:
父母=(xy_fit_sorted [:,:2])
了解我认为有意义的内容:
父母=(xy_fit_sorted [:1,:])
就像整个矩阵在一行中一样。
答案 0 :(得分:0)
我不确定您的大多数代码在做什么,所以这只是一个猜测: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
也具有额外的维度。
请注意,numpy文档无论如何都会说出np.matrix:
甚至对于线性代数,也不再建议使用此类。而是使用常规数组。该类将来可能会被删除。