Python 有没有一种方法可以循环使用np.where的返回值?
有没有办法循环这个元组(?),其中左数组是数组中的位置,右数组是我想插入到给定位置的值:Python 有没有一种方法可以循环使用np.where的返回值?,python,arrays,numpy,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 只需使用一个简单的索引: ind
(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
只需使用一个简单的索引:
indices, values = my_tuple
array[indices] = values
如果您还没有最终的数组,您可以使用像
np.zero
,np.ones
,等等这样的期望函数创建它,其大小为最大索引的大小 只需使用一个简单的索引:
indices, values = my_tuple
array[indices] = values
如果您还没有最终的数组,您可以使用像
np.zero
,np.ones
,等等这样的期望函数创建它,其大小为最大索引的大小 我想您需要的转置,其中元组:
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
zip(*)
是transpose的列表版本:
for i,j in zip(*idx):
print(i,j)
我想您需要的转置,其中元组:
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
zip(*)
是transpose的列表版本:
for i,j in zip(*idx):
print(i,j)