为了修改图像中特定垂直线的值,我想提取图像的3波段垂直线
当我是二维数组时,我使用以下代码提取垂直线:
vertical_line = array[:,[1]]
我试图在3d阵列图像中使用此代码,但失败了
#image shape(b,g,r) (100,100,3)
# my try
vertical_line_try_1 = image[:,[1]][3]#result => [[255,255,255]]
vertical_line_try_2 = image[:,[1][3]]#result => IndexError: list index out of range
vertical_line_try_3 = image[:,[1],[3]]#result => IndexError: index 3 is out of bounds for axis 2 with size 3
如何在不写循环的情况下一次提取三个波段的垂直线
当您使用切片进行索引时,相应的维度将保持不变(因为您可以获得一个可能的跨越范围的值)。另一方面,当您使用单个数字进行索引时,该维度将消失
例:
从您的二维示例来看,似乎您正在使用高级索引作为保持维度的一种方式。如果这是真的,那么使用一个包含单个元素的切片(如我所示)会更干净(我的观点)和更快(用IPython中的
%timeit
测试)现在,回到你的问题上来。看起来您想要提取第二维度索引等于1的所有值,类似于下图中的红色部分
如果是这种情况,那么只要使用
image[:,1, :]
(或者只使用image[:,1]
)就可以获得矩阵形式的值,或者使用image[:,1:2, :]
就可以获得三维数组了解失败的尝试实际上在做什么也很有用
image[:,[1]][3]
:这实际上是同一行中的两个索引操作。 首先,image[:,[1]]
将返回一个100x1x3
数组,然后使用[3]
的第二个索引将使用第四行。由于第二个索引是一个常规的索引(不是花哨的,也不是一个切片),因此索引的维度将消失,最终得到一个1x3
数组image[:,[1][3]]
:这一次我真的不确定它在做什么image[:,[1],[3]]
:这意味着“获取第一维度的所有值,但仅获取第一维度的第二个索引和第三维度的第四个索引的值。由于第三维度只有“size”3,因此尝试获取第四个索引会导致越界错误李>相关问题 更多 >
编程相关推荐