python: 如何改变 skimage resize 输出的形状
python: how to change shape of the output of skimage resize
我正在使用 skimage.transform.resize
。假设一个图形是 180x180
像素,有 3 个通道。
例如:
from skimage.transform import resize
x = resize(im, (16, 16))
结果的形状,即x
是(16x16x3)
。即x
的第三维表示通道。但是,我希望得到形状为 (3x16x16)
的结果。也就是说,我需要数组的第一个维度来表示通道。我怎样才能做到这一点?
谢谢大家对我的帮助!
这是 numpy 的工作 rollaxis,numpy 也是 scikit-image 的核心。
编辑: 或者更直观:np.moveaxis.
代码:
import numpy as np
a = np.arange(48).reshape((4, 4, 3))
print(a)
print(a.shape)
b = np.rollaxis(a, 2) # complete roll as 3rd argument void -> start=0
# or: b = np.moveaxis(a, 2, 0)
print(b)
print(b.shape)
print(a[2,3,0])
print(b[0,2,3])
输出:
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]
[[24 25 26]
[27 28 29]
[30 31 32]
[33 34 35]]
[[36 37 38]
[39 40 41]
[42 43 44]
[45 46 47]]]
(4, 4, 3)
[[[ 0 3 6 9]
[12 15 18 21]
[24 27 30 33]
[36 39 42 45]]
[[ 1 4 7 10]
[13 16 19 22]
[25 28 31 34]
[37 40 43 46]]
[[ 2 5 8 11]
[14 17 20 23]
[26 29 32 35]
[38 41 44 47]]]
(3, 4, 4)
33
33
我正在使用 skimage.transform.resize
。假设一个图形是 180x180
像素,有 3 个通道。
例如:
from skimage.transform import resize
x = resize(im, (16, 16))
结果的形状,即x
是(16x16x3)
。即x
的第三维表示通道。但是,我希望得到形状为 (3x16x16)
的结果。也就是说,我需要数组的第一个维度来表示通道。我怎样才能做到这一点?
谢谢大家对我的帮助!
这是 numpy 的工作 rollaxis,numpy 也是 scikit-image 的核心。
编辑: 或者更直观:np.moveaxis.
代码:
import numpy as np
a = np.arange(48).reshape((4, 4, 3))
print(a)
print(a.shape)
b = np.rollaxis(a, 2) # complete roll as 3rd argument void -> start=0
# or: b = np.moveaxis(a, 2, 0)
print(b)
print(b.shape)
print(a[2,3,0])
print(b[0,2,3])
输出:
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]
[[24 25 26]
[27 28 29]
[30 31 32]
[33 34 35]]
[[36 37 38]
[39 40 41]
[42 43 44]
[45 46 47]]]
(4, 4, 3)
[[[ 0 3 6 9]
[12 15 18 21]
[24 27 30 33]
[36 39 42 45]]
[[ 1 4 7 10]
[13 16 19 22]
[25 28 31 34]
[37 40 43 46]]
[[ 2 5 8 11]
[14 17 20 23]
[26 29 32 35]
[38 41 44 47]]]
(3, 4, 4)
33
33