有没有办法循环遍历np.where的返回值?

时间:2016-12-21 22:43:47

标签: python arrays numpy

有没有办法循环遍历这个元组(?),其中左数组是数组中的位置,右数组是我想要插入到给定位置的值:

(array([   0,    4,    6, ..., 9992, 9996, 9997]), array([3, 3, 3, ..., 3, 3, 3]))

上面的输出是从以下代码生成的:

np.where(h2 == h2[i,:].max())[1]

我希望结果如下:

array[0] = 3
array[4] = 3
...
array[9997] = 3

2 个答案:

答案 0 :(得分:2)

只需使用简单的索引:

indices, values = my_tuple

array[indices] = values

如果你还没有最终数组,你可以使用像np.zerosnp.ones之类的欲望函数创建它,其大小与最大索引的大小相同。

答案 1 :(得分:1)

我想你想要site-packages/cython_gsl/__init__.pxd元组的cython_gsl

transpose

事实上,有一个功能可以做到这一点:

where

迭代In [204]: x=np.arange(1,13).reshape(3,4) In [205]: x Out[205]: array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In [206]: idx=np.where(x) In [207]: idx Out[207]: (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int32), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int32)) In [208]: ij=np.transpose(idx) In [209]: ij Out[209]: array([[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1], [1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3]], dtype=int32) ,我可以打印:

np.argwhere(x)

ij是转置的列表版本:

In [213]: for i,j in ij:
     ...:     print('array[{}]={}'.format(i,j))
     ...:     
array[0]=0
array[0]=1
array[0]=2