numpy.require
numpy.require(a, dtype=None, requirements=None) [source]
返回提供的类型满足要求的ndarray。
此函数对于确保返回具有正确标志的数组以传递给已编译的代码(也许通过ctypes)非常有用。
参数 : | a :array_like 要转换为满足类型和要求的对象的对象。 dtype :data-type 所需的数据类型。 如果为 如果您的应用程序要求数据以本机字节序显示, 请在dtype规范中包含字节序规范。 requirements : 需求列表可以是以下任意一项 : ‘F_CONTIGUOUS’ (‘F’) :确保Fortran连续数组 ‘C_CONTIGUOUS’ (‘C’) :确保C连续数组 'ALIGNED' ('A') :确保数据类型对齐的数组 ‘WRITEABLE’ (‘W’) :确保可写数组 'OWNDATA' ('O') : 确保数组拥有自己的数据 ‘ENSUREARRAY’, (‘E’) : 确保基本数组而不是子类 |
返回值 : | out :ndarray 如果给定,则具有指定要求和类型的数组。 |
Notes
如果需要,可以通过复制副本来保证返回的数组具有列出的要求。
例子
1)将数组转换为 C-order
import numpy as np
# 创建一个随机数组,默认是 C-order
arr = np.array([[1, 2], [3, 4]], order='F') # Fortran-order
# 使用 numpy.require 将其转换为 C-order
c_order_array = np.require(arr, requirements='C')
print("原数组的存储顺序:", arr.flags['C_CONTIGUOUS']) # False
print("转换后的数组的存储顺序:", c_order_array.flags['C_CONTIGUOUS']) # True
2)指定数据类型和存储顺序
import numpy as np
# 创建一个数组
arr = np.array([1, 2, 3, 4], dtype=np.float32)
# 使用 numpy.require 将其转换为 float64 并要求 Fortran-order
new_array = np.require(arr, dtype=np.float64, requirements=['F', 'A'])
print("新数组的数据类型:", new_array.dtype) # float64
print("新数组的存储顺序:", new_array.flags['F_CONTIGUOUS']) # True
3)确保数组是可写的
import numpy as np
# 创建一个只读数组
arr = np.array([1, 2, 3], dtype=np.int32)
arr.setflags(write=False)
# 使用 numpy.require 将其转换为可写数组
writable_array = np.require(arr, requirements='W')
print("原数组是否可写:", arr.flags['WRITEABLE']) # False
print("转换后的数组是否可写:", writable_array.flags['WRITEABLE']) # True
4)使用示例
import numpy as np
# 创建一个 2x3 的数组,并检查其内存布局属性
x = np.arange(6).reshape(2, 3)
print("原始数组 x:")
print(x)
print("原始数组 x 的属性:")
print(x.flags)
# 使用 numpy.require 将 x 转换为指定的数据类型和内存布局
# dtype 设为 np.float32,要求 'A'(保持内存顺序)、
# 'O'(对齐)、'W'(可写)和 'F'(Fortran-order)
y = np.require(x, dtype=np.float32, requirements=['A', 'O', 'W', 'F'])
print("\n转换后的数组 y:")
print(y)
print("转换后的数组 y 的属性:")
print(y.flags)