Vis*_*ngh 3 python arrays numpy
如何在 Python 中获取由 1D np.array 中的值表示的索引处值为 1 的 2D np.array。
例子:
[1, 2, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)
应转换为
[[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
这里你已经预先知道了新数组的宽度(shape[2])值。
我可以手动执行此操作,但有什么方法可以直接使用 NumPy 方法执行此操作以加快执行速度吗?我的数组的维度非常大,我必须对所有迭代执行此操作。因此,为每次迭代手动执行此操作对计算的要求非常高。
您可以使用创建一个包含零的数组np.zeros。数组的形状应该是(len(1D array), max(1D array)+1)。然后使用NumPy的索引。
idx = [1, 2, 5, 1, 2]
shape = (len(idx), max(idx)+1)
out = np.zeros(shape)
out[np.arange(len(idx)), idx] = 1
print(out)
[[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)