NumPy:创建类似“重复”的bool数组,但是有多个维度

时间:2014-10-11 03:54:46

标签: python numpy multidimensional-array scipy

我正在寻找与sum()相反的东西。我们走了:

x = array([
    [False, False, False, False, False],
    [ True, False, False, False, False],
    [ True,  True, False, False, False],
    [ True,  True,  True, False, False]])

x.sum(axis=1)
Out: array([0, 1, 2, 3])

所以我想走向相反的方向:从[0,1,2,3]到像x这样的数组(我可以在x中指定我想要的列数,当然,在它之上#5; 5 )。

解决方案理想情况下也应该适用于更高的维度,我当然不想在Python中循环,因为输入可能比这个例子更长。也就是说,这是一个使用循环的解决方案:

s = np.array([0, 1, 2, 3])
y = np.zeros((len(s), 5), np.bool)
for row,col in enumerate(s):
    y[row,0:col] = True

1 个答案:

答案 0 :(得分:2)

IIUC - 我不确定我这样做 - 您可以使用arange和广播比较:

>>> v = np.array([0,1,3,2])
>>> np.arange(5) < v[...,None]
array([[False, False, False, False, False],
       [ True, False, False, False, False],
       [ True,  True,  True, False, False],
       [ True,  True, False, False, False]], dtype=bool)

或2D:

>>> v = np.array([[1,2],[0,2]])
>>> np.arange(5) < v[...,None]
array([[[ True, False, False, False, False],
        [ True,  True, False, False, False]],

       [[False, False, False, False, False],
        [ True,  True, False, False, False]]], dtype=bool)
>>> ((np.arange(5) < v[...,None]).sum(2) == v).all()
True