gpt4 book ai didi

python - 使用 numpy 创建特定数组

转载 作者:行者123 更新时间:2023-11-28 19:53:07 25 4
gpt4 key购买 nike

我想使用 numpy 创建这种数组:

[[[0,0,0], [1,0,0], ..., [1919,0,0]],
[[0,1,0], [1,1,0], ..., [1919,1,0]],
...,
[[0,1019,0], [1,1019,0], ..., [1919,1019,0]]]

我可以通过以下方式访问:

>>> data[25][37]
array([25, 37, 0])

我试过用这种方式创建一个数组,但还不完整:

>>> data = np.mgrid[0:1920:1, 0:1080:1].swapaxes(0,2).swapaxes(0,1)
>>> data[25][37]
array([25, 37])

你知道如何使用 numpy 解决这个问题吗?

最佳答案

方法 #1:这是使用 np.ogridarray-initialization 的一种方法 -

def indices_zero_grid(m,n):
I,J = np.ogrid[:m,:n]
out = np.zeros((m,n,3), dtype=int)
out[...,0] = I
out[...,1] = J
return out

sample 运行-

In [550]: out = indices_zero_grid(1920,1080)

In [551]: out[25,37]
Out[551]: array([25, 37, 0])

方法 #2: @senderle's cartesian_product 的修改也受到 @unutbu's modification to it 的启发-

import functools
def indices_zero_grid_v2(m,n):
"""
Based on cartesian_product
http://stackoverflow.com/a/11146645 (@senderle)
Inspired by : https://stackoverflow.com/a/46135435 (@unutbu)
"""
shape = m,n
arrays = [np.arange(s, dtype='int') for s in shape]
broadcastable = np.ix_(*arrays)
broadcasted = np.broadcast_arrays(*broadcastable)
rows, cols = functools.reduce(np.multiply, broadcasted[0].shape), \
len(broadcasted)+1
out = np.zeros(rows * cols, dtype=int)
start, end = 0, rows
for a in broadcasted:
out[start:end] = a.reshape(-1)
start, end = end, end + rows
return out.reshape(-1,m,n).transpose(1,2,0)

运行时测试-

In [2]: %timeit indices_zero_grid(1920,1080)
100 loops, best of 3: 8.4 ms per loop

In [3]: %timeit indices_zero_grid_v2(1920,1080)
100 loops, best of 3: 8.14 ms per loop

关于python - 使用 numpy 创建特定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46544554/

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