gpt4 book ai didi

python - 没有for循环的行,列分配

转载 作者:行者123 更新时间:2023-11-28 17:47:24 26 4
gpt4 key购买 nike

我写了一个小脚本,通过知道它们的行和列坐标来为一个 numpy 数组赋值:

gridarray = np.zeros([3,3])
gridarray_counts = np.zeros([3,3])

cols = np.random.random_integers(0,2,15)
rows = np.random.random_integers(0,2,15)
data = np.random.random_integers(0,9,15)

for nn in np.arange(len(data)):
gridarray[rows[nn],cols[nn]] += data[nn]
gridarray_counts[rows[nn],cols[nn]] += 1

事实上,我知道同一个网格单元格中存储了多少个值,它们的总和是多少。但是,在长度超过 100000 的数组上执行此操作会变得非常慢。有没有不使用 for 循环的另一种方法?

类似的方法可行吗?我知道这还行不通。

gridarray[rows,cols] += data
gridarray_counts[rows,cols] += 1

最佳答案

我会为此使用 bincount,但现在 bincount 只需要 1darrays,所以你需要编写自己的 ndbincout,比如:

def ndbincount(x, weights=None, shape=None):
if shape is None:
shape = x.max(1) + 1

x = np.ravel_multi_index(x, shape)
out = np.bincount(x, weights, minlength=np.prod(shape))
out.shape = shape
return out

然后你可以这样做:

gridarray = np.zeros([3,3])

cols = np.random.random_integers(0,2,15)
rows = np.random.random_integers(0,2,15)
data = np.random.random_integers(0,9,15)

x = np.vstack([rows, cols])
temp = ndbincount(x, data, gridarray.shape)
gridarray = gridarray + temp
gridarray_counts = ndbincount(x, shape=gridarray.shape)

关于python - 没有for循环的行,列分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16089737/

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