gpt4 book ai didi

python - 在 Numpy 中将索引转换为向量

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:05 25 4
gpt4 key购买 nike

假设我们有这样的数据:

import numpy as np
data = np.array([1,0,1,2,1,2])

我想把它转换成这样:

[0 1 0
1 0 0
0 1 0
0 0 1
0 1 0
0 0 1]

我如何在 Numpy(或其他相关包)中执行此操作?我们有ind2vec在 MATLAB 中执行此操作的函数。

最佳答案

在 NumPy 中执行此操作的一种相当常见的方法是比较 dataarange 并将 bool 数组转换为整数类型:

>>> (np.arange(3) == data[:,None]).astype(int)
array([[0, 1, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[0, 1, 0],
[0, 0, 1]])

更一般地说,如果您想指定 N 列(类似于 Matlab 的函数),这里有一个包含必要步骤的函数。您可以将索引列表 ind 作为 Python 列表或 NumPy 数组传递:

def ind2vec(ind, N=None):
ind = np.asarray(ind)
if N is None:
N = ind.max() + 1
return (np.arange(N) == ind[:,None]).astype(int)

然后举例:

>>> ind2vec([4,0,2])
array([[0, 0, 0, 0, 1],
[1, 0, 0, 0, 0],
[0, 0, 1, 0, 0]])

>>> ind2vec([1,3,2,1,0], N=10)
array([[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

关于python - 在 Numpy 中将索引转换为向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30374407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com