如何处理数组数组以及如何在 Numpy 中初始化多个数组?

How work to with an array of arrays and how initialize multiple arrays in Numpy?

我必须在 Python 中编写一个 ABM(基于代理的模型)项目,我需要初始化 50 个代理,每个代理包含一组不同的数字。我不能使用 50 行的矩阵,因为每个代理(每一行)可以有不同数量的元素,所以每个代理的向量长度不相同:当 agent_i 的某些条件出现在算法中时,一个数字由算法计算的值被添加到它的向量中。 最简单的方法是像这样手动编写每个

agent_1 = np.array([])
agent_2 = np.array([])
agent_3 = np.array([])
...

但我当然不能。我不知道是否存在一种通过循环自动初始化的方法,比如

for i in range(50):
    agent_i = np.array([])

如果它存在,它将很有用,因为当算法中出现某些条件时,我可以将计算出的数字添加到 agent_i:

agent_i = np.append(agent_i, result_of_algorithm)

也许另一种方法是使用数组数组

[[agent_1_collection],[agent_2_collection], ... , [agent_50_collection]]

再一次,我不知道如何初始化数组的数组,也不知道如何将一个数字添加到特定的数组:事实上我认为不能这样做(假设,为了简单起见,我有这个只有 3 个代理的小数组,而且我知道它是如何完成的):

vect = np.array([[1],[2,3],[4,5,6]])
result_of_algorithm_for_agent_2 = ...some calculations that we assume give as result... = 90 
vect[1] = np.append(vect[1], result_of_algorithm_for_agent_2)

输出:

array([[1], array([ 2,  3, 90]), [4, 5, 6]], dtype=object)

为什么会变成那样?

您对如何操作数组的数组有什么建议吗?例如,如何将元素添加到子数组(代理)的特定点?
谢谢。

数组列表

您可以创建数组列表:

agents = [np.array([]) for _ in range(50)]

然后将值附加到某个代理,比如 agents[0],使用:

items_to_append = [1, 2, 3]  # Or whatever you want.
agents[0] = np.append(agents[0], items_to_append)

列表列表

或者,如果您不需要使用 np.arrays,您可以使用代理值列表。在这种情况下,您将初始化为:

a = [[] for _ in range(50)]

并且您可以使用

附加到 agents[0]
single_value = 1  # Or whatever you want.
agents[0].append(single_value)

或与

items_to_append = [1, 2, 3]  # Or whatever you want
agents[0] += items_to_append