In [182]: R = np.random.randint(0,25,(100,2))
In [197]: A0=np.zeros((25,25),int)
In [198]: for point in R: A0[tuple(point)] += 1
In [199]: A1=np.zeros((25,25),int)
In [200]: np.add.at(A1,(R[:,0],R[:,1]),1)
In [201]: np.allclose(A0,A1)
Out[201]: True
Я использовал (R[:,0],R[:,1])
вместо R
, потому что в документах говорится:
Если первый операнд имеет несколько измерений, индексы могут быть кортежем массива, как объекты индекса или объекты среза .
По поводу вашего tolist
исправления:
In [216]: A2=np.zeros((25,25),int)
In [217]: np.add.at(A2,R.T.tolist(),1)
/usr/local/bin/ipython3:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
#!/usr/bin/python3
In [218]: np.allclose(A0,A2)
Out[218]: True
In [219]: A2=np.zeros((25,25),int)
In [220]: np.add.at(A2,tuple(R.T.tolist()),1)
In [221]: np.allclose(A0,A2)
Out[221]: True
In [208]: np.__version__
Out[208]: '1.18.2'