我目前有一个包含以下数据的numpy数组:
array([0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0,
1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0,
0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0])
我需要将其转换为如下所示的数组:
array([0., 1.],
[0., 1.],
[1., 0.],
[1., 0.],
[1., 0.],
[0., 1.],
[1., 0.],
[1., 0.],
[1., 0.],
[1., 0.],
...
[0., 1.])
我认识到第一步显然是转换成一个浮点数,但我不知道下一步从哪里开始。有没有地图功能可以很好的工作?一个lambda?一个for循环?我觉得如果我已经有了一个不同的数组格式,就会很简单,但是我不知道如何有条件地添加一个维数,然后用与已经存在的二进制相反的精确的二进制来填充它。所有这些都是基于if-then条件的吗?对不起,我是Python的新手,所以我还不知道所有的工具。
发布于 2019-05-31 07:12:32
您可以在适当的模板中使用高级索引:
small_example = np.array([1,0,0,1,1,1,0,1])
(1-np.eye(2))[small_example]
# array([[1., 0.],
# [0., 1.],
# [0., 1.],
# [1., 0.],
# [1., 0.],
# [1., 0.],
# [0., 1.],
# [1., 0.]])
同样的想法也可以使用np.where
实现
np.where(small_example[:,None], *np.eye(2))
# array([[1., 0.],
# [0., 1.],
# [0., 1.],
# [1., 0.],
# [1., 0.],
# [1., 0.],
# [0., 1.],
# [1., 0.]])
更直接的方法展示了如何创建列和行向量,如何将它们一起广播以及如何强制转换dtype
(np.c_[small_example]^np.r_[:2]).astype(float)
# array([[1., 0.],
# [0., 1.],
# [0., 1.],
# [1., 0.],
# [1., 0.],
# [1., 0.],
# [0., 1.],
# [1., 0.]])
我们还可以对输入及其“负”进行列堆栈;我们使用1.0
来触发类型提升:
np.c_[small_example,1.0-small_example]
# array([[1., 0.],
# [0., 1.],
# [0., 1.],
# [1., 0.],
# [1., 0.],
# [1., 0.],
# [0., 1.],
# [1., 0.]])
https://stackoverflow.com/questions/56386036
复制相似问题