gpt4 book ai didi

python - 连接大的 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 20:04:43 24 4
gpt4 key购买 nike

假设我有一些 NumPy 数组 ab,其中 a.shape(N, 5000) 并且 b.shape(N, 2500)N 是一些样本,可能会根据我的问题/算法而有所不同 - 但它对于 ab 总是相同的。

现在我想要另一个形状为 (N, 7500) 的数组 c,它在 [0: 5000]b[5000:7500] 中的值。

目前我正在创建一个零填充缓冲区数组并将值切片到其中:

# ...retrieving a
# ...retrieving b
c = zeros.((N, 7500)).astype(np.float32)

# insert values of a
c[:, 0:5000] = a

# insert values of b
c[:, 5000:7500] = b

# free up memory
del a, b

这是一种快速/高效(因此是“pythonic”/“numpy'ish”)的方式吗?或者是否存在在空间/内存消耗或计算时间方面更好的解决方案

ab 是从其他地方加载并经过预处理的,因此无法以某种方式直接将数据插入缓冲区 c无需创建 ab

最佳答案

c = np.hstack([a,b]) 会做你想做的事。另见 np.concatenate


时间结果

a = np.ones((1000,5000), dtype=np.float64)
b = np.ones((1000,2500), dtype=np.float64)

%timeit c = np.concatenate([a,b], axis=1)
1000 loops, best of 3: 66.4 ms per loop

%timeit c = np.hstack([a,b])
1000 loops, best of 3: 67.3 ms per loop

# Check that it is really the same:
np.testing.assert_array_equal(np.concatenate([a,b], axis=1), np.hstack([a,b]))

所以 concatenate 可能会快一点,因为 hstack 只是 concatenate 的包装器(不必要的函数调用)

作为引用

%%timeit
c = np.zeros((1000, 7500), dtype=np.float64)

# insert values of a
c[:, 0:5000] = a

# insert values of b
c[:, 5000:7500] = b

1000 loops, best of 3: 69.7 ms per loop

看起来几乎和 concatenate 一样快。但这只是因为第一个轴是 1000。如果我将第一个轴更改为仅包含 10 元素,则时间完全不同:

a = np.ones((10,5000), dtype=np.float64)
b = np.ones((10,2500), dtype=np.float64)

# concatenate
1000 loops, best of 3: 349 µs per loop
# hstack
1000 loops, best of 3: 406 µs per loop
# your approach
1000 loops, best of 3: 452 µs per loop

关于python - 连接大的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35317706/

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