[英]Convert indices to vectors in 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(或其他相關包)中做到這一點? 為了做到這一點,我們在MATLAB中有ind2vec
函數。
在NumPy的做這個一個相當普遍的方法是比較data
與arange
和投布爾數組整數類型:
>>> (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]])
一種方法是:
import numpy as np
data = np.array([1,0,1,2,1,2])
idx = np.zeros((data.size, data.max()+1))
idx[np.arange(data.size), data] = 1
def ind_to_vec(data):
maxd = max(data)
mind = min(data)
b = np.zeros([len(data),maxd-mind+1])
for ii in range(mind,maxd+1):
for jj in range(len(data)):
if data[jj]==ii:
b[jj,ii]=1
return b
這將遍歷輸入數組中的每個可能值,並檢查它是什么值。 然后,它會填充一個否則為零的數組,該列的值為1。 輸入數據的輸出是
array([[ 0., 1., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.