我有一个 nxN numpy 数组,其中 N 约为 500_000。根据程序的用例,n 可以是 1,或者例如 1000。我希望避免每次使用数组时都在代码中充斥关于数组形状的 if 子句。另外,我需要该数组的第一个维度 (n) 来匹配代码库中其他数组的第一个维度。
因此,对于 n=1 的情况,我最初决定分配一个 nxN 数组,填充第一行并复制数据:
my_array = np.repeat(np.reshape(my_array[0,:],(1,my_array.shape[1])),1000,axis=0)
但是,这相当浪费,占用了 9 GiB 的内存。我想要一个包含数据的 1xN 数组和一个指向 1xN 数组的 1000xN 指针数组(如果 python 中存在这样的东西)。
有什么想法吗?谢谢
NumPy 中没有“指针数组”这样的东西,但你可以通过 broadcasting 获得你需要的东西。
首先,很有可能您实际上并不需要首先创建该二维数组。使用 NumPy 广播规则,尝试在同一操作中同时使用 shape-
(N,)
一维数组和 shape-(M, N)
二维数组通常会将一维数组视为与二维数组完全相同你想从中创造。您也许可以创建一个一维数组并继续使用它。
numpy.broadcast_to
创建 1D 数组的 2D 视图,其中每一行共享相同的底层内存:
a = # N-element array
b = numpy.broadcast_to(a, (1000, N))