首页 > 解决方案 > 有效地初始化多个numpy数组

问题描述

我需要初始化多个具有相同形状的 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))
  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)
  1. 初始化其中一个,然后复制多次:
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)

或者也许有更好的方法?

标签: pythonnumpy

解决方案


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 会导致内存泄漏


推荐阅读