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

有效初始化多个Numpy数组

时旭东
2023-03-14

我需要初始化具有相同形状的多个Numpy数组。想知道哪种方式是最好的:

  1. 为每个人写一行:
dist_x=np.zeros((1,len(pose07)-1))
dist_y=np.zeros((1,len(pose07)-1))
rots_absulute=np.zeros((1,len(pose07)-1))
rots=np.zeros((1,len(pose07)-1))
length=len(pose07)-1

dist_x=np.zeros(1,length)
dist_y=np.zeros(1,length)
rots_absulute=np.zeros(1,length)
rots=np.zeros(1,length)
dist_x=np.zeros((1,len(pose07)-1))
dist_y=np.copy(dist_x)
rots_absulute=np.copy(dist_x)
rots=np.copy(dist_x)

或者有更好的方法?

共有1个答案

郑嘉悦
2023-03-14
arr1, arr2, arr3, arr4 = np.zeros((4, 1, len(pose07)-1))

编辑:做了一些基准测试

def func1(inp):
    
    a = np.zeros([1, len(inp)])
    b = np.zeros([1, len(inp)])
    c = np.zeros([1, len(inp)])
    d = np.zeros([1, len(inp)])
    
    return 1
def func2(inp):
    
    length = len(inp)

    a = np.zeros([1, length])
    b = np.zeros([1, length])
    c = np.zeros([1, length])
    d = np.zeros([1, length])
    
    return 1
def func3(inp):
    
    a = np.zeros([1, len(inp)])
    b = np.copy(a)
    c = np.copy(a)
    d = np.copy(a)
    
    return 1
def func4(inp):
    
    a, b, c, d = np.zeros([4, 1, len(inp)])
    
    return 1
import perfplot

bench = perfplot.bench(
    n_range= range(1, 50),
    setup= lambda n: np.random.randint(100, size= [n]),
    kernels= [
        func1,
        func2,
        func3,
        func4
    ]
)

bench.show()

根据基准测试func2(长度首先存储在变量中)似乎表现最好,

并尽量避免func 4,正如Paul Panzer在下面的评论中指出的,func 4可能会导致内存泄漏

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

  • 我找不到任何描述如何做到这一点的内容,这让我相信我没有以正确的惯用Python方式来做这件事。关于“正确的”Python方法的建议也将不胜感激。 我为正在编写的数据记录器提供了一系列变量(任意记录长度,具有已知的最大长度)。在MATLAB中,我将它们全部初始化为长度为n的一维零数组,n大于我所看到的条目数,在日志循环中分配每个单独的元素,并在测量结束时修剪多余的零。初始化过程如下所示: 有没有一种

  • 问题内容: 我知道您可以在实例化期间初始化数组,如下所示: 有没有办法用ArrayList做同样的事情?还是我必须单独添加内容? 问题答案: Arrays.asList可以在这里提供帮助:

  • 问题内容: 我希望能够“快速”构建一个numpy数组,但我不知道该数组的大小。 例如,我想做这样的事情: 这将导致包含x的所有元素,这显然是一个简单的答案。我很好奇这是否可能? 问题答案: 构建一个Python列表并将其转换为Numpy数组。每个附加项需要O(1)的摊销时间+ O( n )才能转换为数组,总共需要O( n )。

  • 我必须用Python写一个基于代理的模型项目,我需要初始化50个代理,每个代理都包含一组不同的数字。我不能使用50行的矩阵,因为每个代理(每行)可以有不同数量的元素,所以每个代理的向量长度不一样:当算法中出现agent_i的某些条件时,然后将算法计算的一个数字添加到它的向量中。最简单的方法是手动编写每一个这样的 但我当然不能。我不知道是否存在一种通过循环自动初始化的方法,比如 如果它存在,它将是有

  • 问题内容: 声明多维数组并为其分配值的正确方法是什么? 这就是我所拥有的: 问题答案: 尝试将适当的行替换为: 您的代码不正确,因为子数组的长度为y,索引从0开始。因此,设置为或将失败,因为索引和超出范围。 ;是初始化矩形多维数组的正确方法。如果希望将其锯齿状(每个子数组的长度可能不同),则可以使用类似于此答案的代码。但是请注意,如果您想要一个完美的矩形多维数组,John关于必须手动创建子数组的主