@John правильно о том, как использовать return значение от numpy.append
, потому что оно не изменяет исходный массив. Однако, есть проблема с ожидаемым выходом:
[[0 1 0 0]
[1 1 0 1]
[0. 0. 0. 0.]
5]
не возможный NumPy массив из двух причин: один является то, что некоторые элементы являются целыми числами, а некоторые из них поплавки, но DTYPE Numpy массива должно быть однородным; другое состоит в том, что каждая строка имеет одинаковую длину, но массивы numpy должны иметь однородную (прямоугольную) форму.
Я думаю, что вы могли бы лучше сделать, это просто вернуть все три вещи:
comm_system
как массив целых чисел,
score_list
как массив поплавки,
- и
context_size
как межд (а не массив).
Вы можете сделать это с кортежем:
def new_agent(agent_type, context_size):
if agent_type == 'random':
comm_system = np.random.random_integers(0, 1, (meanings, signals))
if agent_type == 'blank':
comm_system = np.zeros((meanings, signals), int)
score_list = np.zeros(signals) #This is different too! No need to type out the 0, 0, ...
# now just return all three:
return comm_system, score_list, context_size
Затем вы можете "распаковать" кортеж вроде так:
random_agent, scores, size = new_agent('random', 5)
Или просто держать их все в одном наборе:
random_agent_info = new_agent('random', 5)
И у вас будет
In [331]: random_agent, scores, size = new_agent('random', 5)
In [332]: random_agent
Out[332]:
array([[0, 1, 1, 0],
[0, 1, 0, 1]])
In [333]: scores
Out[333]: array([ 0., 0., 0., 0.])
In [334]: size
Out[334]: 5
In [336]: random_agent_info
Out[336]:
(array([[1, 1, 0, 1],
[0, 1, 0, 0]]),
array([ 0., 0., 0., 0.]),
5)
In [337]: random_agent_info[0]
Out[337]:
array([[1, 1, 0, 1],
[0, 1, 0, 0]])
In [338]: random_agent_info[1]
Out[338]: array([ 0., 0., 0., 0.])
In [339]: random_agent_info[2]
Out[339]: 5
Если вы хотите иметь comm_system
и score_list
быть один (3,2)
массив, вы можете сделать это с помощью:
def new_agent(agent_type, context_size):
...
return np.vstack([comm_system, score_list]), context_size
Тогда вы получите один массив и один INT:
In [341]: random_agent, size = new_agent('random', 5)
In [342]: random_agent
Out[342]:
array([[ 1., 0., 1., 1.],
[ 1., 0., 1., 0.],
[ 0., 0., 0., 0.]])
In [343]: size
Out[343]: 5