我有一个3D numpy数组,该数组是在特定时间戳t处的2D(m,n)图像的堆栈。所以我的数组是形状(t,m,n)。我想绘制一个像素值作为时间的函数。
例如:
import numpy as np
import matplotlib.pyplot as plt
data_cube = []
for i in xrange(10):
a = np.random(100,100)
data_cube.append(a)
所以我的(t,m,n)现在的形状为(10,100,100)。假设我要在我要执行的10个步骤中的每个步骤上绘制一维索引[12] [12]的值:
plt.plot(data_cube[:][12][12])
plt.show()
但是我得到索引超出范围错误。我以为我可能会混合使用索引,但是我生成的每个图似乎都在``错误''的轴上,即跨越2D数组之一,但是我希望它``通过''垂直堆栈。预先感谢!
答案 0 :(得分:2)
这里是解决方法:由于您已经在使用numpy
,因此将最终列表转换为数组,然后仅使用切片即可。您遇到的问题有两个:
第一:您最后的data_cube
不是数组。对于列表,您将不得不遍历值
第二:切片不正确。
import numpy as np
import matplotlib.pyplot as plt
data_cube = []
for i in range(10):
a = np.random.rand(100,100)
data_cube.append(a)
data_cube = np.array(data_cube) # Added this step
plt.plot(data_cube[:,12,12]) # Modified the slicing
输出
一个不太冗长的版本,可以避免迭代:
data_cube = np.random.rand(10, 100,100)
plt.plot(data_cube[:,12,12])