【发布时间】:2017-03-02 18:41:47
【问题描述】:
所以我有以下代码:
import numpy as np
array1 = np.array([[[[2, 2, 3], [0, 2, 0], [2, 0, 0]],
[[1, 2, 2], [2, 2, 0], [0, 2, 3]],
[[0, 4, 2], [2, 2, 2], [2, 2, 3]]],
[[[2, 3, 0], [3, 2, 0], [2, 0, 3]],
[[0, 2, 2], [2, 2, 0], [2, 2, 3]],
[[1, 0, 2], [2, 2, 2], [2, 2, 0]]],
[[[2, 0, 0], [0, 2, 0], [2, 0, 0]],
[[2, 2, 2], [0, 2, 0], [2, 2, 0]],
[[0, 2, 2], [2, 2, 2], [2, 2, 0]]]])
array2 = np.array([[[[2, 2, 3], [0, 2, 0], [2, 0, 0]],
[[1, 2, 2], [2, 2, 0], [0, 2, 3]],
[[0, 4, 2], [2, 2, 2], [2, 2, 3]]],
[[[2, 3, 0], [3, 2, 0], [2, 0, 3]],
[[0, 2, 2], [2, 10, 0], [2, 2, 3]],
[[1, 0, 2], [2, 2, 2], [2, 2, 0]]],
[[[2, 0, 0], [0, 2, 0], [2, 0, 0]],
[[2, 2, 2], [0, 2, 0], [2, 2, 0]],
[[0, 2, 2], [2, 2, 2], [2, 2, 0]]]])
def calc(x, y):
result = y/x
return result
final_result = []
for x, y in zip(array1, array2):
final_result.append(calc(np.array(x), np.array(y)))
总而言之,我有两个包含一些 3D 数组的列表,然后我定义了一个函数。最后一部分是我在函数中使用每个 3D 数组的地方,我最终得到一个其他 3D 数组的列表 (final_result),其中在 array1 和 array2 的每个条目上都使用了该函数。
但是,如您所见,array1 最终在函数中给出了 x 值,在某些条目中确实有 0 值。是的,从数学上讲,这不好。但在这种情况下,我真的只需要将 x-entry 为零的条目设为零。因此,它不需要在发生这种情况时运行该函数,而只需跳过它,并将该条目保留为零。
这个可以吗?
【问题讨论】:
-
如何使用:try and except case 以避免此类错误?
-
“我有两个列表,其中包含一些 3D 数组” - 这不是您发布的代码的内容。该代码使用 2 个 4 维数组。数组列表通常是个坏主意。仅当您有非常强烈的特定理由时才应使用它们。
-
也许我没有使用正确的术语 :) 我实际拥有的(不是这里)是转换为 3D 矩阵的图像。所以你可能看到的 4D 实际上只是图像的切片(CT 扫描)。
标签: python arrays function numpy