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向量。我如何確保發射被添加到發射? –