numpy.ravel() 函数是用于将多维数组展平为一维数组的方法。它返回一个展平的数组,并且不会改变原始数组的形状。本文主要介绍一下NumPy中ravel方法的使用。

numpy.ravel

numpy.ravel(a, order='C')    [source]

返回一个连续的扁平数组。

返回包含输入元素的一维数组。 仅在需要时才进行复制。

从NumPy 1.10开始,返回的数组将具有与输入数组相同的类型。 (例如,掩码数组输入将返回一个掩码数组)

参数 :

a :array_like

输入数组。 将按顺序指定的顺序读取a中的元素,

并将其打包为一维数组。

order{‘C’,’F’, ‘A’, ‘K’}, 可选

使用此索引顺序读取a的元素。

 'C'表示以行为主的C样式索引元素,

最后一个轴索引更改最快,

回到第一个轴索引更改最慢。 

'F'表示以Fortran样式的列优先顺序索引元素,

第一个索引更改最快,

最后一个索引更改最慢。 

请注意,'C'和'F'选项不考虑基础数组的内存布局,

仅涉及轴索引的顺序。

 'A'表示如果a在内存中是连续的,

则以类似于Fortran的索引顺序读取元素,

否则为类似于C的顺序。

 'K'表示按顺序在内存中读取元素,

但当步幅为负时反转数据除外。 

默认情况下,使用'C'索引顺序。

返回值 :

y :array_like

y是与a具有相同子类型的数组,其形状为(a.size,)

 请注意,矩阵是特殊情况下的向后兼容性,如果a是矩阵,

则y是一维ndarray。

Notes

在二维中,以行优先的C样式顺序,行索引变化最快,列索引变化最快。 这可以概括为多个维度,其中行优先顺序意味着沿第一个轴的索引变化最快,而沿最后一个轴的索引变化最快。 对于以列为主的Fortran风格的索引排序则相反。

如果希望在尽可能多的情况下获得视图,则最好使用arr.reshape(-1)

例子

1)使用 ravel 函数展平数组

import numpy as np

# 定义一个二维数组
arr = np.array([[1, 2, 3],
                [4, 5, 6]])

# 使用 ravel 函数展平数组
flattened = np.ravel(arr)
print("Flattened array:", flattened)

# 修改展平后的数组
flattened[0] = 100
print("Modified flattened array:", flattened)
print("Original array (modified due to sharing):", arr)

2)默认参数 order='C'

import numpy as np


x = np.array([[1, 2, 3], [4, 5, 6]])

print("Original array:")
print(x)
print("np.ravel(x):", np.ravel(x))
print("x.reshape(-1):", x.reshape(-1))

3)指定 order='F'

import numpy as np


x = np.array([[1, 2, 3], [4, 5, 6]])

print("np.ravel(x, order='F'):", np.ravel(x, order='F'))
print()

4)对转置后的数组进行展平

import numpy as np


x = np.array([[1, 2, 3], [4, 5, 6]])

print("Transposed array:")
x_transposed = x.T
print(x_transposed)
print("np.ravel(x_transposed):", np.ravel(x_transposed))
print("np.ravel(x_transposed, order='A'):", np.ravel(x_transposed, order='A'))
print()

5)指定 order='K',不改变轴顺序

import numpy as np


x = np.array([[1, 2, 3], [4, 5, 6]])

a = np.arange(3)[::-1]
print("a:", a)
print("a.ravel(order='C'):", a.ravel(order='C'))
print("a.ravel(order='K'):", a.ravel(order='K'))
print()

6)三维数组的展平效果

import numpy as np


x = np.array([[1, 2, 3], [4, 5, 6]])

a = np.arange(12).reshape(2,3,2).swapaxes(1,2)
print("Original 3D array:")
print(a)
print("np.ravel(a, order='C'):", np.ravel(a, order='C'))
print("np.ravel(a, order='K'):", np.ravel(a, order='K'))

推荐文档

相关文档

大家感兴趣的内容

随机列表