我有一个numpy数组
a = numpy.array([1,2,3,0])
我想做点什么
a == numpy.array([0,1,2,3])
并获取
[[False, True, False, False],
[False, False, True, False],
[False, False, False, True ],
[True, False, False, False]]
换句话说,我希望第i列显示a
的每个元素是否等于i。这感觉就像numpy可能变得容易的东西。有什么想法吗?
答案 0 :(得分:4)
这里使用的关键概念是广播。
a = numpy.array([1,2,3,0])
b = numpy.array([0,1,2,3])
a[..., None] == b[None, ...]
结果:
>>> a[..., None] == b[None, ...]
array([[False, True, False, False],
[False, False, True, False],
[False, False, False, True],
[ True, False, False, False]], dtype=bool)
了解如何使用广播将大大改善您的NumPy代码。你可以在这里阅读:
答案 1 :(得分:1)
你可以重塑矢量和矢量并比较:
>>> a = numpy.array([1,2,3,0])
>>> b = numpy.array([0,1,2,3])
>>> a.reshape(-1,1) == b.reshape(1,-1)
array([[False, True, False, False],
[False, False, True, False],
[False, False, False, True],
[ True, False, False, False]], dtype=bool)
答案 2 :(得分:1)
以上是这样做的一种方式。另一种可能的方式(虽然我仍然不相信没有更好的方法)是:
import numpy as np
a = np.array([[1, 2, 3, 0]]).T
b = np.array([[0, 1, 2, 3]])
a == b
array([[False, True, False, False],
[False, False, True, False],
[False, False, False, True],
[ True, False, False, False]], dtype=bool)
我认为你只需要确保一个是列向量,一个是行向量,它会为你做比较。
答案 3 :(得分:0)
您可以使用列表推导来遍历a
的每个索引,并将该值与b
进行比较:
>>> import numpy as np
>>> a = np.array([1,2,3,0])
>>> b = np.array([0,1,2,3])
>>> ans = [ list(a[i] == b) for i in range(len(a)) ]
>>> ans
[[False, True, False, False],
[False, False, True, False],
[False, False, False, True],
[ True, False, False, False]]
我通过创建列表列表使输出与您的示例匹配,但您可以轻松地将答案设为Numpy数组。