【问题标题】:How to plot a 2D figure form a 4D array如何从 4D 数组中绘制 2D 图形
【发布时间】:2016-08-12 21:37:17
【问题描述】:

我想绘制一个 2D 图形,它是 4D 阵列的平面切割。 例如:

In[1]:
x = [0, 1, 2]
y = [3, 4, 5]
z = [6, 7, 8]
f = [9, 10, 11]
X, Y, Z, F = meshgrid(x, y, z, f)  #create 4D grid


Out[1]:
array([[[[0, 0, 0],
         [0, 0, 0],
         [0, 0, 0]],

        [[1, 1, 1],
         [1, 1, 1],
         [1, 1, 1]],

        [[2, 2, 2],
         [2, 2, 2],
         [2, 2, 2]]],


       [[[0, 0, 0],
         [0, 0, 0],
         [0, 0, 0]],

        [[1, 1, 1],
         [1, 1, 1],
         [1, 1, 1]],

        [[2, 2, 2],
         [2, 2, 2],
         [2, 2, 2]]],


       [[[0, 0, 0],
         [0, 0, 0],
         [0, 0, 0]],

        [[1, 1, 1],
         [1, 1, 1],
         [1, 1, 1]],

        [[2, 2, 2],
         [2, 2, 2],
         [2, 2, 2]]]])

In[2]:
A = X + 1j*Y + Z + 1j* F

Out[2]:
array([[[[  6.+12.j,   6.+13.j,   6.+14.j],
         [  7.+12.j,   7.+13.j,   7.+14.j],
         [  8.+12.j,   8.+13.j,   8.+14.j]],

        [[  7.+12.j,   7.+13.j,   7.+14.j],
         [  8.+12.j,   8.+13.j,   8.+14.j],
         [  9.+12.j,   9.+13.j,   9.+14.j]],

        [[  8.+12.j,   8.+13.j,   8.+14.j],
         [  9.+12.j,   9.+13.j,   9.+14.j],
         [ 10.+12.j,  10.+13.j,  10.+14.j]]],


       [[[  6.+13.j,   6.+14.j,   6.+15.j],
         [  7.+13.j,   7.+14.j,   7.+15.j],
         [  8.+13.j,   8.+14.j,   8.+15.j]],

        [[  7.+13.j,   7.+14.j,   7.+15.j],
         [  8.+13.j,   8.+14.j,   8.+15.j],
         [  9.+13.j,   9.+14.j,   9.+15.j]],

        [[  8.+13.j,   8.+14.j,   8.+15.j],
         [  9.+13.j,   9.+14.j,   9.+15.j],
         [ 10.+13.j,  10.+14.j,  10.+15.j]]],


       [[[  6.+14.j,   6.+15.j,   6.+16.j],
         [  7.+14.j,   7.+15.j,   7.+16.j],
         [  8.+14.j,   8.+15.j,   8.+16.j]],

        [[  7.+14.j,   7.+15.j,   7.+16.j],
         [  8.+14.j,   8.+15.j,   8.+16.j],
         [  9.+14.j,   9.+15.j,   9.+16.j]],

        [[  8.+14.j,   8.+15.j,   8.+16.j],
         [  9.+14.j,   9.+15.j,   9.+16.j],
         [ 10.+14.j,  10.+15.j,  10.+16.j]]]])

现在A的形状是

(3, 3, 3, 3)

现在我的问题是如何从这个 4D 数组(Y=0 和 F = 0)绘制 2D 图形,这是从 4D 图形绘制平面切割的正确方法吗?

【问题讨论】:

    标签: python arrays multidimensional-array plot slice


    【解决方案1】:

    可以使用matplotlib.pyplot.imshow 绘制从 3D 网格(冲浪图)中的空间图形切割而成的形状为 n x m 的平面。但是,如果它不是冲浪图,您可以使用plot,但您必须根据所需尺寸计算图形的轮廓。

    from matplotlib.pyplot import imshow, show
    
    imshow(variable, interpolation='none')
    show()
    

    形状也可以调整如下:

    # Given |variable| is an object of type numpy.array:
    
    var_reshaped = variable.reshape(int(variable.size/2), -1)
    

    这会从数据中创建一个方形输出。重塑阵列时应保持警惕,以确保形状的完整性不受影响。也就是说,您必须确保重构数组的m x n 与您从中提取平面的两个维度(x、y 或 z 的任何双重组合)相同。

    另外,您不能直接从 4D 乘坐飞机。您必须先提取 3D 数组,然后再提取 2D 数组。例如,想象一个 MRI 有 10 次曝光(4D:10 x 50 x 50 x 50)。您必须首先提取一个曝光(3D:50 x 50 x 50),然后尝试显示该切片(2D:50 x 50)。

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2020-09-25
      相关资源
      最近更新 更多