📜  numpy 沿两个轴展平 (1)

📅  最后修改于: 2023-12-03 14:44:48.948000             🧑  作者: Mango

Numpy沿两个轴展平

在Numpy中,我们可以使用np.ravel()或者np.flatten()将一个n维数组沿着一个轴展平,变为一维数组。但是,如果我们想要沿两个轴展平呢?这篇文章将会为大家介绍如何沿两个轴展平,同时也会比较ravelflatten的异同。

ravelflatten

首先,我们需要了解ravelflatten的区别。这两个函数都可以将一个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'参数,表示我们希望沿着列的方向先展开数组,再沿着行的方向展开。

方法二:使用flattenreshape组合

使用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的行和列将会颠倒。最后再次使用flattenc展平,将二维数组变为一维数组d

总结

本文主要介绍了在Numpy中,如何沿两个轴展平,同时还介绍了ravelflatten函数的区别。如果想要沿两个轴展平,可以使用ravel函数,并传入参数order='F';如果想要使用flatten函数和reshape函数组合,可以先使用flatten将数组展平,然后使用reshape将其变回二维数组,再使用flatten将其沿两个轴展平。