我在尋找一種高效優雅的方式來做到這一點。我希望這個例子能夠解釋我的擔憂。numpy slice assignment
我們已經有了一個np.array這樣的:
omega = np.array([1.03415121504, 1.29595060284, 1.55774999064, 1.81954937844,
...
2.08134876623, 2.37359445321, -2.11179506541, -1.84999567761])
,現在我想操縱它,就像
omega[omega < 0.0] = omega + 2 * np.pi
omega[omega >= 2 * np.pi] = omega - 2 * np.pi
第二條語句可以覆蓋拳頭聲明的計算值,然後有一個十字路口。我發現np.piecewise,但是這不提供這樣的行爲。
我該如何達到這個效率?
的corrent行爲是這樣的(但很效率不高/不雅):
tmp = []
for o in omega:
if o < 0.0:
tmp.append(o + 2 * np.pi)
elif o >= (2 * np.pi):
tmp.append(o - 2 * np.pi)
else:
tmp.append(o)
omega = np.array(tmp)
因此有人提出用numpy的的nditer用於上述目的的經歷? (尤其是性能/效率)
你是否意識到歐米加奧米加= 0 + 2 * np.pi'有點奇怪?你可能意指'歐米茄[歐米茄<0.0] + = 2 * np.pi'。 (第一種形式爲'omega'的所有元素添加'2 * np.pi',然後使用這個新數組中的第一個條目作爲'omega'的第一個否定條目的值 - 值變得很奇怪) – 2012-02-09 15:34:29
@SvenMarnach哇,當你用2d或3d數組做它時,它會給出一個錯誤,「數組不能廣播以糾正形狀」,當你做omega [:] = wrong_size_array時,它會給出一個錯誤,所以它有點奇怪的是,1d布爾索引案例不檢查不匹配。 – 2012-02-09 18:00:07
@Bago:這種行爲實際上是記錄在案的。它有時是有用的,但對於更高維度沒有有用的概括。 – 2012-02-09 18:11:01