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

标签 python matlab numpy

假设我们有这样的数据:

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/

相关文章:

matlab - 如何在 MATLAB R2014b 中访问 PropertyEvent 的新值?

matlab - 如何从 Matlab 中的轴中辨别图例?

arrays - 如何在 numpy 中对元组数组进行 bool 切片

python - 将颜色条和线条添加到多个 imshow() 图中

python - 基于距离矩阵的词聚类

python - 如何中断 python 中的阻塞方法?

Python:pydoc 模块可以输出具有相对路径的 HTML 文档吗?

matlab - 给定四分位数,我如何使用 MATLAB、matplotlib、gnuplot 或其他一些软件包绘制盒须?

python - 提取值高于阈值的 numpy 数组的子数组

python - Sympy 不简化自然平方数的平方根