[英]How to extract coefficients from a line equation in python without using numpy?
[英]how to extract line in images(3bands) using numpy in python?
为了修改图像中特定垂直线的值,我想提取图像的 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
如何在不编写循环的情况下一次提取三个波段的垂直线?
当您使用切片进行索引时,会保留相应的维度(因为您会获得可能的跨值范围)。 另一方面,当您使用单个数字进行索引时,该维度就会消失。
前任:
a = np.random.randn(4,5)
# Let's get the third column in the matrix
print(a[:, 2].shape) # prints `(4,)` -> we get a vector
print(a[:, 2:3].shape) # prints `(4,1)` -> we keep the result as a column matrix
从您的二维示例来看,您似乎正在使用高级索引作为保持维度的一种方式。 如果这是真的,那么使用我所展示的包含单个元素的切片会更干净(我认为)和更快(在 IPython 中使用%timeit
进行测试)。
现在,回到你的问题。 看起来你想提取所有第二维索引等于1的值,类似于下图中的红色部分。
如果是这种情况,则只需使用image[:,1, :]
(或仅使用image[:,1]
)如果您将值作为矩阵获取,或者使用image[:,1:2, :]
如果你想要一个 3D 阵列。
了解失败的尝试实际上在做什么也很有用。
image[:,[1]][3]
:这实际上是同一行中的两个索引操作。 首先, image[:,[1]]
将返回一个100x1x3
数组,然后使用[3]
的第二个索引将占用第四行。 由于第二个索引是常规索引(不是花哨的,也不是切片),因此索引维度消失,最后得到一个1x3
数组image[:,[1][3]]
:这个我不太确定它在做什么image[:,[1],[3]]
:这意味着“从第一个维度中获取所有值,但仅从第一个维度的第二个索引和第三个维度的第四个索引中获取。由于只有第三个维度具有“大小”3,然后尝试获取第四个索引会导致越界错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.