问题描述
我有一个张量为10的样本,每个样本包含10个时间序列20x20x3 RGB图像,我想提取绿色通道
图像存储在称为图像的数组中
例如:
images[0][0][:,:,1]
返回一个样本中一幅图像的绿色通道。
但是,当我尝试使用命令时:
images[0][:][:,1]
我收到错误:
IndexError: too many indices for array
如何概括我的第一行代码以从第一个样本中提取所有绿色通道图像?
数据形状:
images.shape
(10,)
images[0].shape
(10,)
images[0][0].shape
(20,20,3)
这里是数据样本。数据是从.mat文件提取的图像,因此将其存储为数组数组,示例如下所示:
images
array([[array([[[41,0],[43,[45,...,[18,[ 5,[ 0,0]],[[45,[50,[49,[ 3,[[49,[48,[[16,[ 1,[[ 3,[[ 0,0]]],dtype=uint8),array([[[87,[92,[86,[33,[51,[60,[[90,[88,[79,[11,[21,[41,[[89,[82,[62,[12,[ 4,[16,[[77,[77,[76,[44,[42,[[88,[85,[54,[53,[89,[55,
解决方法
像这样吗?
green_0 = [i[:,:,1] for i in images[0]]
all_greens = [[i[:,1] for i in ims] for ims in images]
但是如果images
已经是一个numpy数组,则只需执行images[0,1]
和images[:,1]
假设images
是具有以下尺寸的NumPy ndarray
:
images[sample_dim,time_dim,width,height,color]
您可以简单地采用单个切片操作,例如:
images[:,1]
在整个数据集中仅显示绿色。
您一直在做什么,即:
images[0][0][:,1]
可以更简洁有效地重写为:
images[0,1]
要了解为什么images[0][0][:,1]
起作用而images[0][:][:,1]
不能起作用的原因,建议您查看一下images[0][0]
和images[0][:]
的形状,它们是您要处理的对象正在尝试使用[:,1]
如果images
不是单个多维数组,则可以在嵌套列表上调用np.array()
构造函数,并将其转换为适当的ndarray
。
相反,如果您输入的是object
s的NumPy数组,其中每个对象也是NumPy数组,则the most efficient approach为:
np.array(images.tolist())