Python - 在 z 平面上切片
Python - slicing on the z-plane
我有一个 3d list of lists mylist
,其形状是
(30, 30, 580)
我想在 z
平面上对其进行切片,例如 z=100
。
我试过以下
plt.imshow(mylist[:][:][100],origin='lower', aspect='auto')
plt.show()
产生错误
index 100 is out of bounds for axis 0 with size 30
据我了解,似乎 imshow
只能处理 x
和 y
平面,但不能在 z
上切片飞机。怎么做?
假设 mylist
是一个 numpy 数组,尝试 mylist[:, :, 100]
。
如果 mylist
是列表列表的列表,您可以使用
沿第三轴切片
[[mylist[i][j][100] for j in range(30)] for i in range(30)]
但是,由于您使用的是 matplotlib,因此还必须安装 NumPy。所以
将 mylist
转换为 NumPy 数组然后使用 NumPy 索引会更容易:
myarrary = np.array(mylist)
plt.imshow(myarray[..., 100], origin='lower', aspect='auto')
mylist[:][:][100]
不起作用的原因是因为 mylist[:]
returns 是 mylist
的浅表副本——一个与 [= 内容完全相同的新列表12=]。所以 mylist
和 mylist[:][:]
都是列表列表的列表。
mylist[:][:][100]
失败的原因与 mylist[100]
失败的原因相同——mylist
的顶级内容只有 30 个项目。
我有一个 3d list of lists mylist
,其形状是
(30, 30, 580)
我想在 z
平面上对其进行切片,例如 z=100
。
我试过以下
plt.imshow(mylist[:][:][100],origin='lower', aspect='auto')
plt.show()
产生错误
index 100 is out of bounds for axis 0 with size 30
据我了解,似乎 imshow
只能处理 x
和 y
平面,但不能在 z
上切片飞机。怎么做?
假设 mylist
是一个 numpy 数组,尝试 mylist[:, :, 100]
。
如果 mylist
是列表列表的列表,您可以使用
[[mylist[i][j][100] for j in range(30)] for i in range(30)]
但是,由于您使用的是 matplotlib,因此还必须安装 NumPy。所以
将 mylist
转换为 NumPy 数组然后使用 NumPy 索引会更容易:
myarrary = np.array(mylist)
plt.imshow(myarray[..., 100], origin='lower', aspect='auto')
mylist[:][:][100]
不起作用的原因是因为 mylist[:]
returns 是 mylist
的浅表副本——一个与 [= 内容完全相同的新列表12=]。所以 mylist
和 mylist[:][:]
都是列表列表的列表。
mylist[:][:][100]
失败的原因与 mylist[100]
失败的原因相同——mylist
的顶级内容只有 30 个项目。