在进行MRI图像分析的过程中,我想“屏蔽”时间序列图像作为预处理的一部分。时间序列图像是4D(第4维是拍摄图像的时间-x,y,z,t)。由于我的遮罩是3D阵列(x,y,z),因此我想为所有时间序列图像复制3D,这样我就可以遮罩4D阵列而不会遇到大小不同的问题。 numpy.ma
无法广播我的想法,并且我总是会收到大小差异的错误。那么将3d阵列复制到4d阵列是否有效?您认为我可以不这样做而执行另一种有效的方法吗?
最佳答案
如果没有更多细节,很难回答您的问题。但这听起来像您正在面对这样的问题:
>>> a = numpy.arange(2 * 3 * 4 * 5).reshape(2, 3, 4, 5)
>>> mask = a[0,...] > 29
>>> numpy.ma.MaskedArray(a, mask)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/
Versions/2.7/lib/python2.7/site-packages/numpy/ma/core.py",
line 2706, in __new__
raise MaskError, msg % (nd, nm)
numpy.ma.core.MaskError: Mask and data not compatible: data size is 120,
mask size is 60.
一个简单的解决方案(如果确实是您的问题)将是使用
concatenate
沿时间维度扩展掩码。因此,例如,如果第一个轴是您的时间维度,则可以执行此操作(其中reps
等于要重复掩码的次数;在这种情况下为2
):>>> numpy.ma.MaskedArray(a, numpy.concatenate([mask] * reps, axis=0))
masked_array(data =
[[[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[20 21 22 23 24]
[25 26 27 28 29]
[-- -- -- -- --]
[-- -- -- -- --]]
[[-- -- -- -- --]
[-- -- -- -- --]
[-- -- -- -- --]
[-- -- -- -- --]]]
[[[60 61 62 63 64]
[65 66 67 68 69]
[70 71 72 73 74]
[75 76 77 78 79]]
[[80 81 82 83 84]
[85 86 87 88 89]
[-- -- -- -- --]
[-- -- -- -- --]]
[[-- -- -- -- --]
[-- -- -- -- --]
[-- -- -- -- --]
[-- -- -- -- --]]]],
mask =
[[[[False False False False False]
[False False False False False]
[False False False False False]
[False False False False False]]
[[False False False False False]
[False False False False False]
[ True True True True True]
[ True True True True True]]
[[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]]]
[[[False False False False False]
[False False False False False]
[False False False False False]
[False False False False False]]
[[False False False False False]
[False False False False False]
[ True True True True True]
[ True True True True True]]
[[ True True True True True]
[ True True True True True]
[ True True True True True]
[ True True True True True]]]],
fill_value = 999999)
关于python - 将3d阵列附加到4d阵列中,第4维是3D阵列的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21336669/