如何处理数组数组以及如何在 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.array
s,您可以使用代理值列表。在这种情况下,您将初始化为:
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
我必须在 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.array
s,您可以使用代理值列表。在这种情况下,您将初始化为:
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