为什么np.where的结果只读多维数组?

1''*_*1'' 5 python numpy

>>> a = np.where(np.ones(5))[0]
>>> a
array([0, 1, 2, 3, 4])
>>> a.flags['WRITEABLE']
True

>>> b = np.where(np.ones((5,2)))[0]
>>> b
array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
>>> b.flags['WRITEABLE']
False
Run Code Online (Sandbox Code Playgroud)

为什么b只读而a不是?文档中未提及此内容.

beh*_*uri 5

内部numpy计算得到维数组,但随后返回一个元组,这个元组是在这个数组上具有相同步幅的视图,每个维度一个 ;

例如,如果数组是这样的:

>>> a
array([[0, 1, 0],
       [3, 0, 5]])
Run Code Online (Sandbox Code Playgroud)

内部numpy首先计算

>>> i
array([0, 1, 1, 0, 1, 2])
Run Code Online (Sandbox Code Playgroud)

其中i[2 * k]i[2 * k + 1]k'非零值的指数; 但是,返回的结果是:

>>> (i[::2], i[1::2])
(array([0, 1, 1]), array([1, 0, 2]))
Run Code Online (Sandbox Code Playgroud)

何时,它创建它作为参数传递0flags的视图.因此,可写标志未设置.

当输入数组是一维时,它需要一个快捷方式,因此标志设置不同.