在 for 循环中解压 `np.unravel_index()`
Unpack `np.unravel_index()` in for loop
我试图在 for
循环定义中直接解压从 np.unravel_index()
返回的元组,但我 运行 遇到以下问题:
for i,j in np.unravel_index(range(len(10)), (2, 5)):
print(i,j)
returns:
ValueError: too many values to unpack (expected 2)
我可以通过以下方式解决问题:
idx = np.unravel_index(range(len(10)), (2, 5))
for i, j in zip(idx[0], idx[1]):
print(i, j)
但我真的觉得我应该能够在 for
循环作业中完成所有工作。
我查看了 Whosebug,没有找到任何可以帮助我解决我的具体问题的东西。
解法:
作为公认的解决方案,我认为这正是我想要的,即直接在 for
循环赋值中解包,并且事先不知道 idx
:
的维度
for i, j in zip(*np.unravel_index(range(len(10)), (2, 5)):
print(i, j)
您的 idx
是一个数组元组:
In [559]: idx = np.unravel_index(np.arange(5),(2,5))
In [560]: idx
Out[560]: (array([0, 0, 0, 0, 0]), array([0, 1, 2, 3, 4]))
元组非常适合索引,例如data[idx]
。事实上,这就是它的预期目的。
您的 zip
将其转换为 2 个元素元组的 list/iteration:
In [561]: list(zip(*idx))
Out[561]: [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
np.transpose
也可以转成(n,2)数组:
In [562]: np.transpose(idx)
Out[562]:
array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[0, 4]])
[562] 上的迭代将与 zip
上的迭代一样慢,可能更慢。但是如果不需要迭代的话,[562]可能会更好
注意我上面用了zip(*idx)
,所以你的表达式可以写成:
for i, j in zip(*np.unravel_index(range(len(neuron_sample)), (2, 5))):
print(i, j)
我试图在 for
循环定义中直接解压从 np.unravel_index()
返回的元组,但我 运行 遇到以下问题:
for i,j in np.unravel_index(range(len(10)), (2, 5)):
print(i,j)
returns:
ValueError: too many values to unpack (expected 2)
我可以通过以下方式解决问题:
idx = np.unravel_index(range(len(10)), (2, 5))
for i, j in zip(idx[0], idx[1]):
print(i, j)
但我真的觉得我应该能够在 for
循环作业中完成所有工作。
我查看了 Whosebug,没有找到任何可以帮助我解决我的具体问题的东西。
解法:
作为公认的解决方案,我认为这正是我想要的,即直接在 for
循环赋值中解包,并且事先不知道 idx
:
for i, j in zip(*np.unravel_index(range(len(10)), (2, 5)):
print(i, j)
您的 idx
是一个数组元组:
In [559]: idx = np.unravel_index(np.arange(5),(2,5))
In [560]: idx
Out[560]: (array([0, 0, 0, 0, 0]), array([0, 1, 2, 3, 4]))
元组非常适合索引,例如data[idx]
。事实上,这就是它的预期目的。
您的 zip
将其转换为 2 个元素元组的 list/iteration:
In [561]: list(zip(*idx))
Out[561]: [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
np.transpose
也可以转成(n,2)数组:
In [562]: np.transpose(idx)
Out[562]:
array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[0, 4]])
[562] 上的迭代将与 zip
上的迭代一样慢,可能更慢。但是如果不需要迭代的话,[562]可能会更好
注意我上面用了zip(*idx)
,所以你的表达式可以写成:
for i, j in zip(*np.unravel_index(range(len(neuron_sample)), (2, 5))):
print(i, j)