2014-01-24 56 views
1

在MRI圖像分析過程中,我想將「時間序列」圖像作爲預處理的一部分進行「遮罩」。時間序列圖像是4D(第四維是拍攝圖像的時間 - x,y,z,t)。由於我的面具是一個3D陣列(x,y,z),我想爲所有時間序列圖像複製3D,這樣我就可以在不考慮任何尺寸的情況下掩蓋4D陣列。 numpy.ma無法廣播我腦海中所想到的東西,而且我總會得到大小差異的錯誤。所以是複製一個3D數組到4D陣列高效?你認爲我可以在不這樣做的情況下執行另一種有效的方式嗎將3d陣列添加到4維陣列中,第4維是3D陣列的數量

+2

你能給一個示例輸入和期望輸出的簡單示例?這將有助於(我們中的一些人)能夠回答你的問題。 – BlackVegetable

回答

1

很難回答你的問題,沒有更多的細節。但它聽起來就像你面對這樣的問題:

>>> 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)