擅长:python、mysql、java
<p>我认为你不可能的预感是正确的。你知道吗</p>
<p>如果您的<code>board</code>本身不是一个视图,那么很容易获得您可以操作的视图:</p>
<pre class="lang-py prettyprint-override"><code>>>> board = np.zeros((8, 8), int)
>>> black = board.ravel()[::2]
>>> black.base is board # is black a view of board?
True
</code></pre>
<p>如果<code>board</code>是<code>a</code>的视图,则内存不会以您可以获得所需视图的方式对齐,因此<code>ravel</code>将创建副本:</p>
<pre class="lang-py prettyprint-override"><code>>>> a = np.zeros(81)
>>> board = a.reshape(9, 9)[:8, :8]
>>> board.base is a # is board a view of a?
True
>>> black = board.ravel()[::2]
>>> black.base in (a, board) # is black a view of a or board?
False
</code></pre>
<p>我能想到的一个解决方法是将每个视图分成两个:</p>
<pre><code>>>> black0 = board[::2, ::2]
>>> black1 = board[1::2, 1::2]
>>> black0.base is a and black1.base is a # are both views of a?
True
</code></pre>