gpt4 book ai didi

python - 重复numpy数组而不复制数据

转载 作者:IT王子 更新时间:2023-10-28 23:38:06 30 4
gpt4 key购买 nike

这个问题以前有人问过,但是这个解决方案只适用于一维/二维数组,我需要一个更一般的答案。

如何在不复制数据的情况下创建重复数组?这让我觉得这是一种通用的东西,因为它有助于在不影响内存的情况下对 python 操作进行矢量化。

更具体地说,我有一个 (y,x) 数组,我想多次平铺该数组以创建一个 (z,y,x) 数组。我可以用 numpy.tile(array, (nz,1,1)) 做到这一点,但我的内存不足。我的具体情况是 x=1500, y=2000, z=700。

最佳答案

一个简单的技巧是使用 np.broadcast_arrays 广播你的 (x, y) 在第一个 z-long 向量维度:

import numpy as np

M = np.arange(1500*2000).reshape(1500, 2000)
z = np.zeros(700)

# broadcasting over the first dimension
_, M_broadcast = np.broadcast_arrays(z[:, None, None], M[None, ...])

print M_broadcast.shape, M_broadcast.flags.owndata
# (700, 1500, 2000), False

为了概括 this answer 中为一维数组给出的 stride_tricks 方法,您只需要包含输出数组的每个维度的形状和步长:

M_strided = np.lib.stride_tricks.as_strided(
M, # input array
(700, M.shape[0], M.shape[1]), # output dimensions
(0, M.strides[0], M.strides[1]) # stride length in bytes
)

关于python - 重复numpy数组而不复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695851/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com