Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NumPy:创建类似“bool”的bool数组;重复;但是在多个维度上_Python_Numpy_Multidimensional Array_Scipy - Fatal编程技术网

Python NumPy:创建类似“bool”的bool数组;重复;但是在多个维度上

Python NumPy:创建类似“bool”的bool数组;重复;但是在多个维度上,python,numpy,multidimensional-array,scipy,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]) 所以我想换一个方

我想我是在寻找与之相反的
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)

理想情况下,该解决方案也应该适用于更高的维度,当然我不想在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
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)
>v=np.数组([0,1,3,2])
>>>np.arange(5)
或在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
v=np.array([[1,2],[0,2]]) >>>np.arange(5)>>((np.arange(5)
看起来你在想:)@WarrenWeckesser:正确!我知道如何从这里到那里…但是这里有点卡住了。在循环解决方案中,看起来输入是
x
,您创建了
y
,但前面您说要从[0,1,2,3]到
x
(即
x
是输出)。从[0,1,2,3]到更大的布尔数组的运算不是你想要的吗?如果是这样,你可以像我在中做的那样做,但是将比较中的等式改为
arange(A.max()+1)
@WarrenWeckesser:是的,我在问题中输入的循环代码有点混乱,因此我对其进行了更新,希望能使其更清晰/自包含/非自引用。您确实理解了——甚至在我澄清我的示例之前。谢谢你,我不会想到这个解决方案的。