Numpy - 创建序数类别嵌入
Numpy - create ordinal categories embedding
我已经将以下代码写入 one-hot encode
整数列表:
import numpy as np
a = np.array([1,2,3,4])
targets = np.zeros((a.size, a.max()))
targets[np.arange(a.size),a-1] = 1
targets
输出:
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
我想更改代码,以更好地适应我的序数 class 问题,这样输出将是:
array([[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 1.]])
我怎样才能做到这一点?
看来你需要 tril
,它给你下三角。
使用 np.ones()
创建任意大小的数组(就像使用 np.zeros()
一样),然后 运行 通过 np.tril()
import numpy as np
a = np.array([1,2,3,4])
targets = np.ones((a.size, a.max()))
targets = np.tril(targets)
targets
或者更简单,使用tri()
import numpy as np
a = np.array([1,2,3,4])
targets = np.tri(a.size, a.max())
targets
(a[:,None]>np.arange(a.max())).astype(float)
样本运行-
In [47]: a = np.array([3,1,2,4]) # generic case of different numbers spread across
In [48]: (a[:,None]>np.arange(a.max())).astype(float)
Out[48]:
array([[1., 1., 1., 0.],
[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 1.]])
如果在a
中有很多条目并且数字范围很小,我们可以创建所有可能的组合然后用a
-offseted one -
索引
np.tri(a.max(), dtype=float)[a-1]
样本运行-
In [79]: a = np.array([3,1,2,4])
In [80]: np.tri(a.max(), dtype=float)[a-1]
Out[80]:
array([[1., 1., 1., 0.],
[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 1.]])
我已经将以下代码写入 one-hot encode
整数列表:
import numpy as np
a = np.array([1,2,3,4])
targets = np.zeros((a.size, a.max()))
targets[np.arange(a.size),a-1] = 1
targets
输出:
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
我想更改代码,以更好地适应我的序数 class 问题,这样输出将是:
array([[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 1.]])
我怎样才能做到这一点?
看来你需要 tril
,它给你下三角。
使用 np.ones()
创建任意大小的数组(就像使用 np.zeros()
一样),然后 运行 通过 np.tril()
import numpy as np
a = np.array([1,2,3,4])
targets = np.ones((a.size, a.max()))
targets = np.tril(targets)
targets
或者更简单,使用tri()
import numpy as np
a = np.array([1,2,3,4])
targets = np.tri(a.size, a.max())
targets
(a[:,None]>np.arange(a.max())).astype(float)
样本运行-
In [47]: a = np.array([3,1,2,4]) # generic case of different numbers spread across
In [48]: (a[:,None]>np.arange(a.max())).astype(float)
Out[48]:
array([[1., 1., 1., 0.],
[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 1.]])
如果在a
中有很多条目并且数字范围很小,我们可以创建所有可能的组合然后用a
-offseted one -
np.tri(a.max(), dtype=float)[a-1]
样本运行-
In [79]: a = np.array([3,1,2,4])
In [80]: np.tri(a.max(), dtype=float)[a-1]
Out[80]:
array([[1., 1., 1., 0.],
[1., 0., 0., 0.],
[1., 1., 0., 0.],
[1., 1., 1., 1.]])