我试图将不同的图像结果存储在一个多维数组中。考虑下面m
有3张大小为3x4的图片,现在我想访问第二张图片,我正在尝试m[:, :, 1]
。但它产生了错误的结果。你可以请你纠正我如何访问子阵列。
m = np.random.random((3,4,3))
array([[[ 0.72474649, 0.88239477, 0.21834498],
[ 0.3594392 , 0.06462519, 0.43329582],
[ 0.83452734, 0.43937307, 0.61267164],
[ 0.75062416, 0.76516036, 0.35487906]],
[[ 0.90644054, 0.22091564, 0.94508058],
[ 0.20201594, 0.60295539, 0.77998197],
[ 0.10496835, 0.77960017, 0.78249163],
[ 0.53903028, 0.81245971, 0.38983454]],
[[ 0.81369716, 0.89243267, 0.49874087],
[ 0.95248644, 0.0847973 , 0.59074351],
[ 0.24507041, 0.03595347, 0.32902477],
[ 0.48906304, 0.14659161, 0.77392082]]])
m[:, :, 1]
// Actual output
array([[ 0.88239477, 0.06462519, 0.43937307, 0.76516036],
[ 0.22091564, 0.60295539, 0.77960017, 0.81245971],
[ 0.89243267, 0.0847973 , 0.03595347, 0.14659161]])
// Expected output
[ 0.90644054, 0.22091564, 0.94508058],
[ 0.20201594, 0.60295539, 0.77998197],
[ 0.10496835, 0.77960017, 0.78249163],
[ 0.53903028, 0.81245971, 0.38983454]
答案 0 :(得分:1)
您可以使用它的预期位置访问单个图像,即 m [0]为您提供第一张图像。
证明:
>>> a = numpy.random.random((3, 4, 3))
>>> a
array([[[ 0.2585421 , 0.6096753 , 0.70295892],
[ 0.50408344, 0.37075371, 0.30463057],
[ 0.76298221, 0.67466292, 0.53305787],
[ 0.63844013, 0.45100157, 0.1346955 ]],
[[ 0.54268873, 0.31534909, 0.40414511],
[ 0.87335605, 0.81278098, 0.12953214],
[ 0.64353518, 0.22347 , 0.63712407],
[ 0.02646421, 0.56478202, 0.57160074]],
[[ 0.36965073, 0.796066 , 0.7289024 ],
[ 0.47232785, 0.43087964, 0.873769 ],
[ 0.12393581, 0.63266617, 0.0935309 ],
[ 0.62007608, 0.77474674, 0.28507152]]])
>>> a[0]
array([[ 0.2585421 , 0.6096753 , 0.70295892],
[ 0.50408344, 0.37075371, 0.30463057],
[ 0.76298221, 0.67466292, 0.53305787],
[ 0.63844013, 0.45100157, 0.1346955 ]])
答案 1 :(得分:1)
这只是一个关于什么是正确的'切片的假设的说明。基于其他领域的工作。你需要知道你的形象是怎样的。建成了。在您的情况下,您有3个图像,但在某些领域(GIS和遥感)3'图像'用于构造3个色带的阵列。可悲的是,有元素的首选顺序,但它不是标准的。
例如,考虑阵列如何构造的正确性的结果'切片。
这三个带都具有5,4的形状
red = np.arange(20).reshape(5,4)
green = np.arange(20, 40).reshape(5,4)
blue = np.arange(40, 60).reshape(5,4)
red
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
green
array([[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31],
[32, 33, 34, 35],
[36, 37, 38, 39]])
blue
array([[40, 41, 42, 43],
[44, 45, 46, 47],
[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59]])
现在这些可以用3种方式组装,这有时取决于你正在使用的软件....所以你必须知道如何构造数组。
rgb_0 = np.stack((red, green, blue), axis=0)
rgb_1 = np.stack((red, green, blue), axis=1)
rgb_2 = np.stack((red, green, blue), axis=2)
最终阵列的形状明显不同,但是......记住......我们不知道它们是如何构建的。
rgb_0.shape, rgb_1.shape, rgb_2.shape
((3, 5, 4), (5, 3, 4), (5, 4, 3))
让我们选择“红色”'有关rgb
的3个变种的信息red_0 = rgb_0[0, :, :]
red_1 = rgb_1[:, 0, :]
red_2 = rgb_2[:, :, 0]
屈服
np.allclose(red_0, red_1) # True
np.allclose(red_0, red_2) # True
np.allclose(red_0, red_2) # True
red_0
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
因此,假设什么是正确的'切片'取决于你对阵列构造方式的了解。
答案 2 :(得分:0)
关于arrays
的整洁事情是,你可以忘记他们存储的内容,并将其缩小到重要的维度 - first
。
因此,您可以将问题减少到:
a = np.array([1, 2, 3])
并且您要提取第二个element
以及2
。现在我们已经用这种方式说明了这个问题,我相信你可以看到它来获得2
,我们只是这样做:
a[1]
这很简单!
答案 3 :(得分:0)
我尝试了m[1, :, :]
或m[1]
,两者都有效。