如何在python中重塑此图像数组?
我有一个8X8图像阵列,如下所示:如何在python中重塑此图像数组?,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个8X8图像阵列,如下所示: a = np.array([[1,1,1,1,2,2,2,2], [1,1,1,1,2,2,2,2], [1,1,1,1,2,2,2,2], [1,1,1,1,2,2,2,2], [3,3,3,3,4,4,4,4], [3,3,3,3,4,4,4,4], [3,3,3,3,4,4,4,4],
a = np.array([[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4]])
a = np.array([
[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],
[[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]],
[[3,3,3,3],[3,3,3,3],[3,3,3,3],[3,3,3,3]],
[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]
])
我想将其重塑为一个数组,使每个部分彼此独立,如下所示:
a = np.array([[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4]])
a = np.array([
[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],
[[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]],
[[3,3,3,3],[3,3,3,3],[3,3,3,3],[3,3,3,3]],
[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]
])
这是一个4X4X4阵列,我可以单独绘制图像的部分。我该怎么做呢?这样就可以了:
>>> b = np.split(np.hstack(np.split(a, 2)), 4, axis=1)
>>> np.array(b)
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3]],
[[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]]])
这可以做到:
>>> b = np.split(np.hstack(np.split(a, 2)), 4, axis=1)
>>> np.array(b)
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3]],
[[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]]])
您也可以尝试以下方法:
np.column_stack((a[:4,:4].ravel(),a[:4,4:8].ravel(),a[4:8,:4].ravel(),a[4:8,4:8].ravel())).T.reshape((4,4,4))
或者这个:
np.concatenate(a.reshape(2,4,8).T).T.reshape((4,4,4))
您也可以尝试以下方法:
np.column_stack((a[:4,:4].ravel(),a[:4,4:8].ravel(),a[4:8,:4].ravel(),a[4:8,4:8].ravel())).T.reshape((4,4,4))
或者这个:
np.concatenate(a.reshape(2,4,8).T).T.reshape((4,4,4))
重新安排阵列的步幅:
import numpy as np
from numpy.lib.stride_tricks import as_strided
def windows(a, window = (2,2), ss = None, flatten = True):
'''
Return a sliding window over a.
a - numpy ndarray
window - shape of the window, int for 1d or tuple for 2d+
ss - int for 1d or tuple for 2d+ how much to slide the window
defaults to window (no overlap)
flatten - if True, all slices are flattened, otherwise, there is an
extra dimension for each dimension of the input.
Returns
an array containing each n-dimensional window from a
'''
if ss is None:
ss = window
data_shape = np.array(a.shape)
# how many windows are there?
windowed_array_shape = tuple(((data_shape - window) // window) + 1)
nbr_windows = np.product(windowed_array_shape)
# the shape of the windowed array
newshape = windowed_array_shape + window
# calculate the strides for the windowed array
newstrides = tuple(np.array(a.strides) * window) + a.strides
# use as_strided to 'transform' the array
windowed_array = as_strided(a, shape = newshape, strides = newstrides)
if not flatten:
return windowed_array
# flatten the windowed array for iteration
dim = (nbr_windows,) + window
windowed_array = windowed_array.reshape(dim)
return windowed_array
a = np.array([[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4]])
>>> b = windows(a, (4,4))
>>> b
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3]],
[[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]]])
>>>
在重新安排阵列的步幅时,还有几个其他选项:
import numpy as np
from numpy.lib.stride_tricks import as_strided
def windows(a, window = (2,2), ss = None, flatten = True):
'''
Return a sliding window over a.
a - numpy ndarray
window - shape of the window, int for 1d or tuple for 2d+
ss - int for 1d or tuple for 2d+ how much to slide the window
defaults to window (no overlap)
flatten - if True, all slices are flattened, otherwise, there is an
extra dimension for each dimension of the input.
Returns
an array containing each n-dimensional window from a
'''
if ss is None:
ss = window
data_shape = np.array(a.shape)
# how many windows are there?
windowed_array_shape = tuple(((data_shape - window) // window) + 1)
nbr_windows = np.product(windowed_array_shape)
# the shape of the windowed array
newshape = windowed_array_shape + window
# calculate the strides for the windowed array
newstrides = tuple(np.array(a.strides) * window) + a.strides
# use as_strided to 'transform' the array
windowed_array = as_strided(a, shape = newshape, strides = newstrides)
if not flatten:
return windowed_array
# flatten the windowed array for iteration
dim = (nbr_windows,) + window
windowed_array = windowed_array.reshape(dim)
return windowed_array
a = np.array([[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[1,1,1,1,2,2,2,2],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4],
[3,3,3,3,4,4,4,4]])
>>> b = windows(a, (4,4))
>>> b
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3]],
[[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]]])
>>>
在中还有几个其他选项,这里有一种使用和的方法-
这里有一种使用和的方法-
我得到[1,1,1,1],[2,2,2],[3,3,3],[4,4,4],[4]我错过了交换吗?是不是应该是swapaxes1,2?@NaN啊,是的,我第一次对它的解释不同。修好了。谢谢你指出!我得到[1,1,1,1],[2,2,2],[3,3,3],[4,4,4],[4]我错过了交换吗?是不是应该是swapaxes1,2?@NaN啊,是的,我第一次对它的解释不同。修好了。谢谢你指出!