No se si es el foro correcto, pero tengo una duda
Estoy intentado crear una array con los siguientes valores
0 | 1, 0, 0
1 | 5, 3, 1
…
5 | 5, 3, 1
6 | 1, 1, 1
…
10| 1, 1, 1
11| 1, 3, 5
…
(último caso, en este caso)
24 | 1, 3, 5
Esta tabla la puedo crear rápidamente con
self.direct_rewards = np.concatenate( (
[1, 0, 0],
np.tile([5, 3, 1], self.nn_top),
np.tile([1, 1, 1], self.nn_hi-self.nn_top),
np.tile([1, 3, 5], self.max_number-self.nn_hi) )
, axis=0).reshape((-1,3))
La idea es que cada columna se corresponde con una acción posible y un estado presente, que es distinto según el tramo de la tabla. Para 0 debe devolver los valores sin mas, pero entre 1 y 5 deben ser eso valores multiplicados por el cociente de dos parámetros, entre 5 y 10 debe devolver 1 si los parámetros son iguales devolver 1, si no cero, y si está por encima de 11, el parámetro multiplicado por el cociente los parámetros invertidos. El tamaño de la tabla podría ser mayor o menor, y los umbrales 5 y 11 también podrían adaptarse.
Mi idea era hacer una matriz con lambdas a las que pasarle los parámetros y que se apañe, quedando la ecuación más limpia…
np.concatenate( (lambda : [1, 0, 0],
np.tile(lambda x,y: x/y*[5, 3, 1], nn_top),
np.tile([1, 1, 1], nn_hi-nn_top),
np.tile(lambda x,y: x/y[1, 3, 5], 24-nn_hi) ),
axis=0).reshape((-1,3))
pero np.concatenate dice que la matriz es "zero-dimensional" y que me vaya a tomar por culo
tile no me da problemas:
np.tile(lambda x,y: x/y*[5, 3, 1], nn_top)
array([<function <lambda> at 0x7fea33ee6f50>,
<function <lambda> at 0x7fea33ee6f50>,
<function <lambda> at 0x7fea33ee6f50>,
<function <lambda> at 0x7fea33ee6f50>,
<function <lambda> at 0x7fea33ee6f50>], dtype=object)
¿Alguna idea?
PD: otro problema mas sencillo, tengo un string
array_string = ["uno","dos","tres"])
quiero recuperar el indice en función del parámetro, y en principio debería valer con)
np.where( array_string == "uno" )
-> debería devolver 0, sin embargo devuelve:
(array([], dtype=int64),)
He intentado hacerlo directamente así también, con idéntico resultado.
np.where(datarate_string == datarate_string[1])
Alguna idea?