当前位置: 首页 > 知识库问答 >
问题:

如何使用数组以及如何在Numpy中初始化多个数组?

卜存
2023-03-14

我必须用Python写一个基于代理的模型项目,我需要初始化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)

为什么会有这样的变化?

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

共有1个答案

丌官嘉勋
2023-03-14

您可以创建阵列列表:

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

然后要将值附加到某些代理,例如代理[0],请使用:

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

或者,如果不需要使用np。数组s,可以使用代理值列表。在这种情况下,您可以使用以下命令初始化:

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

您可以使用以下任一选项将其附加到代理[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
 类似资料:
  • 我需要初始化具有相同形状的多个Numpy数组。想知道哪种方式是最好的: 为每个人写一行: 或者有更好的方法?

  • 问题内容: 有没有办法初始化形状的numpy数组并将其添加到其中?我将通过列表示例解释我需要的内容。如果要创建循环中生成的对象列表,可以执行以下操作: 我想对一个numpy数组做类似的事情。我了解vstack,串联等。但是,这些似乎需要两个numpy数组作为输入。我需要的是: 本应具有的形状。这该怎么做? 编辑: 我想添加以下说明。我知道我可以定义然后填充它。但是,这需要预先指定big_array

  • 问题内容: 我正在初始化这样的数组: NetBeans在此行指出一个错误: 我该如何解决这个问题? 问题答案: 上面的信息不正确(语法错误)。这意味着你正在分配一个仅可容纳元素的数组。 如果要初始化数组,请尝试使用: 注意两个声明之间的区别。将新数组分配给声明的变量时,new必须使用。 即使你纠正了语法,访问仍然是不正确的(你只能访问,因为Java中的数组索引是基于0的)。访问]将抛出。

  • 在Java中,可以初始化数组,例如: Kotlin的数组初始化是什么样子的?

  • 问题内容: 我只是看了这个SO Post: 但是,哥伦比亚大学教授的笔记按以下方式进行。请参阅第9页。 哪种方法正确?他们似乎在说不同的话。 特别是在注释版本中没有。 问题答案: 这根本不会在Java中编译(因为您正在将数组类型的值分配给非数组类型的变量): 被以下错误拒绝(另请参见:http : //ideone.com/0jh9YE): 要进行编译,请声明其类型,然后在其上循环:

  • 问题内容: 我开始使用python,并尝试使用一个二维列表,最初我在每个地方都填充了相同的变量。我想出了这个: 它提供了所需的结果,但感觉像是一种解决方法。有没有更简单/更短/更优雅的方式来做到这一点? 问题答案: Python中经常出现的一种模式是 这有助于激励列表理解的引入,从而将代码段转换为 它更短,有时更清晰。通常,你养成识别这些习惯的习惯,并经常用理解代替循环。 你的代码两次遵循此模式