np.where
生成二维元件的元组,如果数组1D的性质。对于一维的情况下,你需要访问的只有np.where
结果的第一个元素:
fired = np.where(v >= 30)[0]
然后,您可以继续前进,拼接矩阵。还通过user @Divakar提供一个建议是使用np.flatnonzero
这将等效找到非零值在NumPy的阵列和展平为一维阵列,用于以下头痛:
fired = np.flatnonzero(v >= 30)
请注意该逻辑来连接不会如果fired
中找不到匹配项,则工作。当您查看连接逻辑时,您需要考虑这一点。使用MATLAB的方便之处在于,您可以连接空矩阵,结果是无效的(显然)。
另请注意,NumPy中没有行向量或列向量的概念。它只是一个一维数组。如果您想专门强制数组成为列向量,则需要在第二维中引入一个单轴,以便执行此操作。请注意,只有np.where
为您提供了匹配的结果,这才有效。之后,您可以使用np.vstack
和np.hstack
垂直和水平连接阵列来帮助您完成所要求的操作。你要做的第一件事就是创建一个空白的二维数组,然后做什么,我们只是覆盖:
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])])
这里np.size
找到NumPy的数组中元素的总数。如果np.where
的结果未生成结果,则fired
中元素的数量应该为0.因此,只有当v
中至少有一个元素受制于v >= 30
时,才会执行if
语句。
您是否在使用NumPy,还是仅仅使用香草Python?另外,这个错误非常直截了当。 ''''''是一个'元组',并且你正试图给一个元组添加一个整数。这个在vanilla Python中的操作是未定义的。 – rayryeng
我正在使用NumPy。被解雇的价值来自:fired = np.where(v> = 30),其中v是一个n * 1向量。我如何确保发射被添加到发射? –