有类似 numpy 数组的指针之类的东西吗?

问题描述 投票:0回答:1

我有一个 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 中存在这样的东西)。

有什么想法吗?谢谢

python numpy memory-management numpy-ndarray
1个回答
0
投票

NumPy 中没有“指针数组”这样的东西,但你可以通过 broadcasting 获得你需要的东西。

首先,很有可能您实际上并不需要首先创建该二维数组。使用 NumPy 广播规则,尝试在同一操作中同时使用 shape-

(N,)
一维数组和 shape-
(M, N)
二维数组通常会将一维数组视为与二维数组完全相同你想从中创造。您也许可以创建一个一维数组并继续使用它。

如果出于某种原因需要 2D 数组,可以使用

numpy.broadcast_to
创建 1D 数组的 2D 视图,其中每一行共享相同的底层内存:

a = # N-element array
b = numpy.broadcast_to(a, (1000, N))
© www.soinside.com 2019 - 2024. All rights reserved.