【发布时间】:2019-04-04 15:13:54
【问题描述】:
我有一个 3D Numpy 数组列表,我想迭代这个结构的每个元素并使用 if statemets 进行一些更改。下面的代码执行我想做的事情:
for counter1, entry in enumerate(all_frames_flow):
for counter2, entry2 in enumerate(entry):
for counter3, entry3 in enumerate(entry2):
for counter4, entry4 in enumerate(entry3):
if entry4 < -20.0:
all_frames_flow[counter1][counter2][counter3][counter4]=-20.0
if entry4 > 20.0:
all_frames_flow[counter1][counter2][counter3][counter4]=20.0
all_frames_flow[counter1][counter2][counter3][counter4]/=20
但我想知道是否有更 Pythonic 的方式。在numpy >=1.15.0,我从文档中尝试了这个新代码,但它失败了,它没有返回我想要的结果,我可以看到大于abs(20) 的值,我想知道为什么会这样:
for counteref, _ in enumerate(backup2):
with np.nditer(backup2[counteref], op_flags=['readwrite'], order = 'K') as it:
for x in it:
#print x
if (x < -20.0):
x=-20.0
if (x > 20.0):
x = 20.0
x/=20.0
【问题讨论】:
-
nditer使用起来很棘手,而且通常不会更快或(这个难以定义的)pythonic。
标签: python-2.7 numpy for-loop iteration