<p>如果数组本质上是1D,<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow noreferrer">^{<cd1>}</a>将生成一个两元素元组。对于1D情况,您只需要访问<code>np.where</code>结果的第一个元素:</p>
<pre><code>fired = np.where(v >= 30)[0]
</code></pre>
<p>然后可以继续连接矩阵。另外,<a href="https://stackoverflow.com/questions/43809833/trying-to-convert-a-matlab-array-to-a-python-array/43810634?noredirect=1#comment74663150_43810634">user @Divakar</a>提供的一个建议是使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.flatnonzero.html" rel="nofollow noreferrer">^{<cd3>}</a>,它将等价地在NumPy数组中找到非零值,并将其展平到1D数组中,以减少麻烦:</p>
^{pr2}$
<p>请注意,如果在<code>fired</code>中没有找到匹配项,则连接逻辑将不起作用。在查看连接逻辑时,您需要考虑到这一点。使用MATLAB的方便之处在于,你可以连接空矩阵,结果是没有效果的(显然)。在</p>
<p>还要注意,NumPy中没有行向量或列向量的概念。它只是一个一维数组。如果您想明确地将数组强制为列向量,那么您需要在第二维中引入一个单轴轴来实现这一点。请注意,只有在<code>np.where</code>给出匹配结果的情况下,这才有效。之后,您可以使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html" rel="nofollow noreferrer">^{<cd6>}</a>和<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html" rel="nofollow noreferrer">^{<cd7>}</a>来垂直和水平连接数组,以帮助您完成所要求的操作。您首先要做的是创建一个空的二维数组,然后执行我们刚刚介绍的内容:</p>
<pre><code>firings = np.array([[]]) # Create blank 2D array
# Some code here...
# ...
# ...
# fired = find(v >= 30); % From MATLAB
fired = np.where(v >= 30)[0]
# or you can use...
# fired = np.flatnonzero(v >= 30)
if np.size(fired) != 0:
fired = fired[:, None] # Introduce singleton axis
# Update firings with two column vectors
# firings = [firings; t + 0 * fired, fired]; % From MATLAB
firings = np.vstack([firings, np.hstack([t + 0*fired, fired])])
</code></pre>
<p>这里<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.size.html" rel="nofollow noreferrer">^{<cd8>}</a>查找NumPy数组中的元素总数。如果<code>np.where</code>的结果没有生成结果,<code>fired</code>中的元素数应该是0。因此,<code>if</code>语句只有在<code>v</code>中发现至少一个元素属于{<cd13>}时才会执行。在</p>