使用ufunc.at.公司关于矩阵

2024-04-20 00:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下numpy数组:

>>> a=np.zeros(10)
>>> a
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

我可以使用numpy.ufunc.at就地修改该数组:

^{pr2}$

如果我现在尝试矩阵,我假设的方法不起作用:

>>> m=np.zeros(16).reshape(4,4)
>>> m
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.add.at(m, [(0,0),(1,1)], 2)
>>> m
array([[ 0.,  4.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

基于提供[(0,0),(1,1)]的元组列表,我的期望是:

      [[ 2.,  0.,  0.,  0.],
       [ 0.,  2.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]]

有什么建议可以作为numpy.ufunc.at中的索引列表来得到这个矩阵吗?在


Tags: 方法numpyadd列表npzeros矩阵数组
1条回答
网友
1楼 · 发布于 2024-04-20 00:20:05

如果要进行多维索引,则不传递索引元组的列表;而传递索引列表(或索引数组)的元组。在

indices = ([0, 1], [0, 1])
np.add.at(m, indices, 2)

indices[0]给出要修改的单元格的所有第一个坐标,indices[1]给出所有第二个坐标。下面是一个例子:

^{pr2}$

我不太清楚为什么会这样。我想,一旦掌握了窍门,它可能会更方便,或者它可能会使规则在某种程度上更加内部一致,但我没有足够的多维索引经验来说明这种或那种方式。在

相关问题 更多 >