📅  最后修改于: 2023-12-03 14:44:48.948000             🧑  作者: Mango
在Numpy中,我们可以使用np.ravel()
或者np.flatten()
将一个n维数组沿着一个轴展平,变为一维数组。但是,如果我们想要沿两个轴展平呢?这篇文章将会为大家介绍如何沿两个轴展平,同时也会比较ravel
和flatten
的异同。
ravel
和flatten
首先,我们需要了解ravel
和flatten
的区别。这两个函数都可以将一个n维数组变为一维数组,但是ravel
函数会尽可能地返回一个视图,也就是说,尽可能地不产生新的数据,而是对原始数据的一个引用。而flatten
函数则会返回一个新的一维数组,并且在内存中新分配一段空间。举个栗子:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = a.ravel()
c = a.flatten()
b[0] = 100
c[0] = 100
print(a) # [[100, 2], [3, 4]]
在这个例子中,我们可以看到,使用ravel
函数改变了b
数组的第一个元素,也同时改变了原数组a
的第一个元素。但是使用flatten
函数改变了c
数组的第一个元素,并不会对原数组a
造成影响。
如果我们想要沿两个轴展平,也就是展平整个数组,那么有哪些方法呢?
ravel
使用ravel
函数展平整个数组非常简单,只需要在函数中传入参数order='F'
,即:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = a.ravel(order='F')
print(b) # [1 3 2 4]
上述代码中,我们传入了order='F'
参数,表示我们希望沿着列的方向先展开数组,再沿着行的方向展开。
flatten
和reshape
组合使用flatten
函数和reshape
函数组合也可以实现沿两个轴展平。首先使用flatten
函数将数组展平成一维数组,然后使用reshape
函数将一维数组重新变成二维数组。代码如下:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = a.flatten()
c = b.reshape((a.shape[1], a.shape[0]))
d = c.flatten()
print(d) # [1 3 2 4]
首先我们将a
数组展平为一维数组b
,然后使用reshape
函数将b
变回为二维数组c
,但是此时c
的行和列将会颠倒。最后再次使用flatten
将c
展平,将二维数组变为一维数组d
。
本文主要介绍了在Numpy中,如何沿两个轴展平,同时还介绍了ravel
和flatten
函数的区别。如果想要沿两个轴展平,可以使用ravel
函数,并传入参数order='F'
;如果想要使用flatten
函数和reshape
函数组合,可以先使用flatten
将数组展平,然后使用reshape
将其变回二维数组,再使用flatten
将其沿两个轴展平。