numpy中flatten()和ravel()

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014157109/article/details/89791200

      在numpy包中,flatten()和ravel()函数都能将多维数组降为一维,区别在于numpy.flatten()返回是拷贝,对拷贝所做的修改不会影响原始矩阵,而numpy.ravel()返回的是视图,修改视图,原始矩阵也会受到影响,详见前面的文章-numpy中视图和副本的区别

1.flatten

ndarray.flatten(order=‘C’)

Parameters: order : {‘C’, ‘F’, ‘A’, ‘K’}, optional
‘C’ means to flatten in row-major (C-style) order.
‘F’ means to flatten in column-major (Fortran- style) order.
‘A’ means to flatten in column-major order if a is Fortran contiguous in memory, row-major order otherwise.
‘K’ means to flatten a in the order the elements occur in memory.
The default is ‘C’.
Returns: y : ndarray
A copy of the input array, flattened to one
dimension.

>>> a = np.array([[1,2], [3,4]])
>>> a.flatten()   # 默认参数为"C",即按照行进行重组
array([1, 2, 3, 4])
>>> a.flatten('F') # 按照列进行重组
array([1, 3, 2, 4])

2.ravel

ravel(a, order=‘C’)
Parameters
a : array_like
Input array. The elements in a are read in the order specified by
order, and packed as a 1-D array.
order : {‘C’,‘F’, ‘A’, ‘K’}, optional
The elements of a are read using this index order. ‘C’ means to index the elements in row-major, C-style order,with the last axis index changing fastest, back to the first axis index changing slowest. ‘F’ means to index the elements in column-major, Fortran-style order, with the first index changing fastest, and the last index changing slowest. Note that the ‘C’ and ‘F’ options take no account of
the memory layout of the underlying array, and only refer to the order of axis indexing. ‘A’ means to read the elements in Fortran-like index order if a is Fortran contiguous in memory, C-like order otherwise. ‘K’ means to read the
elements in the order they occur in memory, except for reversing the data when strides are negative.

Returns

y : array_like
y is an array of the same subtype as a, with shape (a.size,).
Note that matrices are special cased for backward compatibility, if a
is a matrix, then y is a 1-D ndarray.

>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> y = np.ravel(x) # 默认order="C",按照行进行重组
>>> y
[1 2 3 4 5 6]
>>> y = np.ravel(x, order='F') # 按照列进行重组
>>> y
[1 4 2 5 3 6]
>>> a = np.arange(12).reshape(2,3,2).swapaxes(1,2)
>>> a
array([[[ 0,  2,  4],
        [ 1,  3,  5]],
       [[ 6,  8, 10],
        [ 7,  9, 11]]])
>>> a.ravel(order='C')
array([ 0,  2,  4,  1,  3,  5,  6,  8, 10,  7,  9, 11])
>>> a.ravel(order='K')
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

参考文章:
https://cloud.tencent.com/developer/article/1406406
https://blog.csdn.net/lanchunhui/article/details/50354978

猜你喜欢

转载自blog.csdn.net/u014157109/article/details/89791200