(Python 3)掩码数组 numpy.ma

本文详细介绍了NumPy库中的MaskedArray模块,包括如何创建、操作和分析这种特殊类型的数组。内容涵盖了从基本的创建方法如`masked_array`和`masked_all`,到各种数学和统计操作,如求和、平均值、标准差等,以及掩码的修改和转换功能。此外,还讨论了掩码数组的形状变换、轴操作、填充和转换为其他数据类型的方法,以及最小值、最大值的查找和排序功能。文章最后提到了多项式拟合和数据裁剪等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

掩码数组操作

常量

  • ma.MaskType numpy.bool_ 的别名

创造

根据现有数据

  • ma.masked_array numpy.ma.core.MaskedArray 的别名
  • ma.array(data[, dtype, copy, order, mask, …]) 可能带有掩码值的数组类。
  • ma.copy(self, *args, **params) a.copy(order=) 返回数组的拷贝。
  • ma.frombuffer(buffer[, dtype, count, offset]) 将缓冲区解释为一维数组。
  • ma.fromfunction(function, shape, **kwargs) 通过在每个坐标上执行函数来构造数组。
  • ma.MaskedArray.copy([order]) 返回数组的副本。

Ones 和 zeros 方法

  • ma.empty(shape[, dtype, order]) 返回给定形状和类型的新数组,而不初始化条目。
  • ma.empty_like(a[, dtype, order, subok]) 返回一个与给定数组具有相同形状和类型的新数组。
  • ma.masked_all(shape[, dtype]) 带所有元素的空掩码数组。
  • ma.masked_all_like(arr) 空掩码数组,具有现有数组的属性。
  • ma.ones(shape[, dtype, order]) 返回一个给定形状和类型的新数组,其中填充了这些数组。
  • ma.zeros(shape[, dtype, order]) 返回一个给定形状和类型的新数组,其中填充了零。

检察数组

  • ma.all(self[, axis, out, keepdims]) 如果所有元素都计算为True,则返回True。
  • ma.any(self[, axis, out, keepdims]) 如果求值的任何元素为True,则返回True。
  • ma.count(self[, axis, keepdims]) 沿给定轴计算数组的非掩码元素。
  • ma.count_masked(arr[, axis]) 计算沿给定轴的遮罩元素数。
  • ma.getmask(a) 返回掩码数组或nomask的掩码。
  • ma.getmaskarray(arr) 返回掩码数组的掩码,或False的完整布尔数组。
  • ma.getdata(a[, subok]) 将掩码数组的数据作为ndarray返回。
  • ma.nonzero(self) 返回非零的未屏蔽元素的索引。
  • ma.shape(obj) 返回数组的形状。
  • ma.size(obj[, axis]) 返回给定轴上的元素数。
  • ma.is_masked(x) 确定输入是否具有掩码值。
  • ma.is_mask(m) 如果m是有效的标准掩码,则返回True。
  • ma.MaskedArray.data 返回当前数据,作为原始基础数据的视图。
  • ma.MaskedArray.mask Mask
  • ma.MaskedArray.recordmask 返回记录的掩码。
  • ma.MaskedArray.all([axis, out, keepdims]) 如果所有元素都计算为True,则返回True。
  • ma.MaskedArray.any([axis, out, keepdims]) 果求值的任何元素为True,则返回True。
  • ma.MaskedArray.count([axis, keepdims]) 沿给定轴计算数组的非掩码元素。
  • ma.MaskedArray.nonzero() 返回非零的未屏蔽元素的索引。
  • ma.shape(obj) 返回数组的形状。
  • ma.size(obj[, axis]) 返回给定轴上的元素数。

操作掩码数组

改变形状

  • ma.ravel(self[, order]) 以视图的形式返回Self的一维版本。
  • ma.reshape(a, new_shape[, order]) 返回一个数组,该数组包含具有新形状的相同数据。
  • ma.resize(x, new_shape) 返回具有指定大小和形状的新掩码数组。
  • ma.MaskedArray.flatten([order]) 返回折叠成一维的数组的副本。
  • ma.MaskedArray.ravel([order]) 以视图的形式返回Self的一维版本。
  • ma.MaskedArray.reshape(*s, **kwargs) 给数组一个新的形状,而不改变它的数据。
  • ma.MaskedArray.resize(newshape[, refcheck, …])

修改轴

  • ma.swapaxes(self, *args, …) 返回axis1和axis2互换后的数组视图。
  • ma.transpose(a[, axes]) 排列数组的大小。
  • ma.MaskedArray.swapaxes(axis1, axis2) 返回axis1和axis2互换后的数组视图。
  • ma.MaskedArray.transpose(*axes) 返回已移置轴的数组视图。

改变维数

  • ma.atleast_1d(*arys) 将输入转换为至少具有一维的数组。
  • ma.atleast_2d(*arys) 将输入视为至少具有两个维度的数组。
  • ma.atleast_3d(*arys) 将输入视为至少具有三个维度的数组。
  • ma.expand_dims(x, axis) 展开数组的形状。
  • ma.squeeze(a[, axis]) 从数组的形状中移除一维项。
  • ma.MaskedArray.squeeze([axis]) 对象的形状中移除一维项。
  • ma.column_stack(tup) 将一维数组作为列堆栈到二维数组中.
  • ma.concatenate(arrays[, axis]) 沿着给定的轴连接数组序列。
  • ma.dstack(tup) 按序列深度排列数组(沿第三轴)。
  • ma.hstack(tup) 以水平顺序(列方式)将数组堆叠。
  • ma.hsplit(ary, indices_or_sections) 横向(按列)将数组拆分为多个子数组。
  • ma.mr_ 沿第一轴将切片对象转换为串联。
  • ma.row_stack(tup) 按顺序垂直(行)排列数组。
  • ma.vstack(tup) 按顺序垂直(行)排列数组。
  • Joining arrays
  • ma.column_stack(tup) 将一维数组作为列堆栈到二维数组中.
  • ma.concatenate(arrays[, axis]) 沿着给定的轴连接数组序列。
  • ma.append(a, b[, axis]) 将值追加到数组的末尾。
  • ma.dstack(tup) 按序列深度排列数组(沿第三轴)。
  • ma.hstack(tup) 以水平顺序(列方式)将数组堆叠。
  • ma.vstack(tup) 按顺序垂直(行)排列数组。

掩码操作

创建掩码

  • ma.make_mask(m[, copy, shrink, dtype]) 从数组创建布尔掩码。
  • ma.make_mask_none(newshape[, dtype]) 返回给定形状的布尔掩码,填充False。
  • ma.mask_or(m1, m2[, copy, shrink]) 使用logical_or运算符组合两个掩码。
  • ma.make_mask_descr(ndtype) 从给定的dtype构造一个dtype描述列表。

访问掩码

  • ma.getmask(a) 返回蒙版数组或nomask的掩码。
  • ma.getmaskarray(arr) 返回掩码数组的掩码,或False的完整布尔数组。
  • ma.masked_array.mask Mask

查找掩码数据

  • ma.flatnotmasked_contiguous(a) 沿给定轴在掩码数组中查找连续的未屏蔽数据。
  • ma.flatnotmasked_edges(a) 查找第一个和最后一个未屏蔽值的索引。
  • ma.notmasked_contiguous(a[, axis]) 沿给定轴在掩码数组中查找连续的未屏蔽数据。
  • ma.notmasked_edges(a[, axis]) 查找沿轴的第一个和最后一个未屏蔽值的索引。
  • ma.clump_masked(a) 返回与1-D数组的掩码块对应的切片列表。
  • ma.clump_unmasked(a) 返回与1-D阵列的未掩蔽块相对应的切片列表。

修改掩码

  • ma.mask_cols(a[, axis]) 屏蔽包含屏蔽值的2D数组的列。
  • ma.mask_or(m1, m2[, copy, shrink]) 使用logical_or运算符组合两个掩码。
  • ma.mask_rowcols(a[, axis]) 屏蔽包含屏蔽值的2D数组的行和/或列。
  • ma.mask_rows(a[, axis]) 屏蔽包含屏蔽值的2D数组的行。
  • ma.harden_mask(self) 硬化掩码。
  • ma.soften_mask(self) 软化掩码。
  • ma.MaskedArray.harden_mask() 硬化掩码。
  • ma.MaskedArray.soften_mask() 软化掩码。
  • ma.MaskedArray.shrink_mask() 尽可能将掩码减少到nomask。
  • ma.MaskedArray.unshare_mask() 复制掩码并将sharedmask标志设置为False。

转换操作

> 转化为掩码数组

  • ma.asarray(a[, dtype, order]) 将输入转换为给定数据类型的掩码数组。
  • ma.asanyarray(a[, dtype]) 将输入转换为掩码数组,保留子类。
  • ma.fix_invalid(a[, mask, copy, fill_value]) 返回带有无效数据的输入,并用填充值替换。
  • ma.masked_equal(x, value[, copy]) 掩盖一个等于给定值的数组。
  • ma.masked_greater(x, value[, copy]) 掩盖大于给定值的数组。
  • ma.masked_greater_equal(x, value[, copy]) 掩盖大于或等于给定值的数组。
  • ma.masked_inside(x, v1, v2[, copy]) 在给定间隔内掩盖数组。
  • ma.masked_invalid(a[, copy]) 掩盖出现无效值的数组(NaN或infs)。
  • ma.masked_less(x, value[, copy]) 掩盖小于给定值的数组。
  • ma.masked_less_equal(x, value[, copy]) 掩盖小于或等于给定值的数组。
  • ma.masked_not_equal(x, value[, copy]) 掩盖不等于给定值的数组。
  • ma.masked_object(x, value[, copy, shrink]) 掩盖数据正好等于值的数组x。
  • ma.masked_outside(x, v1, v2[, copy]) 在给定间隔之外屏蔽数组。
  • ma.masked_values(x, value[, rtol, atol, …]) 掩盖浮点数相等的数组。
  • ma.masked_where(condition, a[, copy]) 掩盖满足条件的数组。

> 转化为一个numpy数组

  • ma.compress_cols(a) 取消包含掩码值的二维数组的整列。
  • ma.compress_rowcols(x[, axis]) 取消二维数组中包含掩码值的行和/或列。
  • ma.compress_rows(a) 取消包含掩码值的二维数组的整行数据。
  • ma.compressed(x) 以一维数组的形式返回所有非掩码数据。
  • ma.filled(a[, fill_value]) 以数组的形式返回输入,用填充值替换掩码数据。
  • ma.MaskedArray.compressed() 以一维数组的形式返回所有非掩码数据。
  • ma.MaskedArray.filled([fill_value]) 返回Self的副本,并使用给定的值填充掩码值。

> 转化为其他对象

  • ma.MaskedArray.tofile(fid[, sep, format]) 将掩码数组保存到二进制格式的文件中。
  • ma.MaskedArray.tolist([fill_value]) 以层次化Python列表的形式返回掩码数组的数据部分。
  • ma.MaskedArray.torecords() 将掩码数组转换为灵活类型的数组。
  • ma.MaskedArray.tobytes([fill_value, order]) 将数组数据作为包含数组中原始字节的字符串返回。

腌制和反腌制

  • ma.dump(a, F) 腌制一个掩码数组并写入文件
  • ma.dumps(a) 返回与掩码数组的腌制相对应的字符串。
  • ma.load(F) cPickle.load的包装器,它接受类似文件的对象或文件名。
  • ma.loads(strg) 从当前字符串加载腌制后的数组。

填充掩码数组

  • ma.common_fill_value(a, b) 返回两个掩码数组的公共填充值(如果有的话)。
  • ma.default_fill_value(obj) 返回参数对象的默认填充值。
  • ma.maximum_fill_value(obj) 返回可以由对象的dtype表示的最小值。
  • ma.maximum_fill_value(obj) 返回可以由对象的dtype表示的最小值。
  • ma.set_fill_value(a, fill_value) 如果a是一个掩码数组,则设置a的填充值。
  • ma.MaskedArray.get_fill_value() 返回掩码数组的填充值。
  • ma.MaskedArray.set_fill_value([value]) 设置掩码数组的填充值。
  • ma.MaskedArray.fill_value Filling value.

掩码数组算法

算法

  • ma.anom(self[, axis, dtype]) 沿着给定的轴计算异常(与算术平均值的偏差)。
  • ma.anomalies(self[, axis, dtype]) 沿着给定的轴计算异常(与算术平均值的偏差)。
  • ma.average(a[, axis, weights, returned]) 返回给定轴上数组的加权平均值。
  • ma.conjugate(x, /[, out, where, casting, …]) 返回复共轭元素。
  • ma.corrcoef(x[, y, rowvar, bias, …]) 返回皮尔逊乘积-矩相关系数。
  • ma.cov(x[, y, rowvar, bias, allow_masked, ddof]) 估计协方差矩阵。
  • ma.cumsum(self[, axis, dtype, out]) 返回给定轴上数组元素的累积和。
  • ma.cumprod(self[, axis, dtype, out]) 返回给定轴上数组元素的累积乘积。
  • ma.mean(self[, axis, dtype, out, keepdims]) 返回沿给定轴排列的数组元素的平均值。
  • ma.median(a[, axis, out, overwrite_input, …]) 沿指定轴计算中值。
  • ma.power(a, b[, third]) 返回从第二个数组提升到幂的按元素划分的基数组。
  • ma.prod(self[, axis, dtype, out, keepdims]) 返回给定轴上数组元素的乘积。
  • ma.std(self[, axis, dtype, out, ddof, keepdims]) 返回数组元素沿给定轴的标准差。
  • ma.sum(self[, axis, dtype, out, keepdims]) 返回给定轴上数组元素的和。
  • ma.var(self[, axis, dtype, out, ddof, keepdims]) 计算沿指定轴的方差。
  • ma.MaskedArray.anom([axis, dtype]) 沿着给定的轴计算异常(与算术平均值的偏差)。
  • ma.MaskedArray.cumprod([axis, dtype, out]) 返回给定轴上数组元素的累积乘积。
  • ma.MaskedArray.cumsum([axis, dtype, out]) 返回给定轴上数组元素的累积和。
  • ma.MaskedArray.mean([axis, dtype, out, keepdims]) 返回沿给定轴排列的数组元素的平均值。
  • ma.MaskedArray.prod([axis, dtype, out, keepdims]) 返回给定轴上数组元素的乘积。
  • ma.MaskedArray.std([axis, dtype, out, ddof, …]) 返回数组元素沿给定轴的标准差。
  • ma.MaskedArray.sum([axis, dtype, out, keepdims]) 返回给定轴上数组元素的和。
  • ma.MaskedArray.var([axis, dtype, out, ddof, …]) 计算沿指定轴的方差。

最小/最大

  • ma.argmax(self[, axis, fill_value, out]) 返回沿给定轴的最大值的索引数组。
  • ma.argmin(self[, axis, fill_value, out]) 沿着给定的轴将索引数组返回到最小值。
  • ma.max(obj[, axis, out, fill_value, keepdims]) 沿着给定的轴返回最大值。
  • ma.min(obj[, axis, out, fill_value, keepdims]) 沿着给定的轴返回最小值。
  • ma.ptp(obj[, axis, out, fill_value]) 沿着给定的维数返回(最大值-最小值)
  • ma.MaskedArray.argmax([axis, fill_value, out]) 返回沿给定轴的最大值的索引数组。
  • ma.MaskedArray.argmin([axis, fill_value, out]) 沿着给定的轴将索引数组返回到最小值。
  • ma.MaskedArray.max([axis, out, fill_value, …]) 沿着给定的轴返回最大值。
  • ma.MaskedArray.min([axis, out, fill_value, …]) 沿着给定的轴返回最小值。
  • ma.MaskedArray.ptp([axis, out, fill_value]) 沿着给定的维数返回(最大值-最小值)。

分拣

  • ma.argsort(a[, axis, kind, order, endwith, …]) 返回按指定轴对数组进行排序的索引的ndarray。
  • ma.sort(a[, axis, kind, order, endwith, …]) 就地对数组进行排序。
  • ma.MaskedArray.argsort([axis, kind, order, …]) 返回按指定轴对数组进行排序的索引的ndarray。
  • ma.MaskedArray.sort([axis, kind, order, …]) 就地对数组进行排序。

代数

  • ma.diag(v[, k]) 提取对角线或构造对角线数组。
  • ma.dot(a, b[, strict, out]) 返回两个数组的点积。
  • ma.identity(n[, dtype]) 返回标识数组。
  • ma.inner(a, b) 两个数组的内积。
  • ma.innerproduct(a, b) 两个数组的内积。
  • ma.outer(a, b) 计算两个向量的外积。
  • ma.outerproduct(a, b) 计算两个向量的外积。
  • ma.trace(self[, offset, axis1, axis2, …]) 沿着数组的对角线返回和。
  • ma.transpose(a[, axes]) 排列数组的大小。
  • ma.MaskedArray.trace([offset, axis1, axis2, …]) 沿着数组的对角线返回和。
  • ma.MaskedArray.transpose(*axes) 返回已移置轴的数组视图。

多项式拟合

  • ma.vander(x[, n]) 生成Vandermonde矩阵。
  • ma.polyfit(x, y, deg[, rcond, full, w, cov]) 最小二乘多项式拟合

裁剪和舍入

  • ma.around 将数组四舍五入到给定的小数位数。
  • ma.clip(a, a_min, a_max[, out]) 剪辑(限制)数组中的值。
  • ma.round(a[, decimals, out]) 返回a的副本,将其四舍五入为“小数”位。
  • ma.MaskedArray.clip([min, max, out]) 返回值限制为[min,max]的数组。
  • ma.MaskedArray.round([decimals, out]) 返回每个元素四舍五入到给定的小数位数。

杂项

  • ma.allequal(a, b[, fill_value]) 如果a和b的所有条目都相等,则返回True,使用Fill_VALUE作为真值,其中任一项或两者都被屏蔽。
  • ma.allclose(a, b[, masked_equal, rtol, atol]) 如果两个数组在公差内按元素大小相等,则返回True。
  • ma.apply_along_axis(func1d, axis, arr, …) 沿着给定的轴向一维切片应用函数.
  • ma.arange([start,] stop[, step,][, dtype]) 在给定的间隔内返回均匀间隔的值。
  • ma.choose(indices, choices[, out, mode]) 使用索引数组从一组选择中构造新数组。
  • ma.ediff1d(arr[, to_end, to_begin]) 计算数组中连续元素之间的差异。
  • ma.indices(dimensions[, dtype]) 返回一个表示网格索引的数组。
  • ma.where(condition[, x, y]) 根据条件返回包含x或y元素的掩码数组。



 

<think>好的,我现在需要帮助用户解决在Python中实现数组的输入和输出方法的问题,特别是使用NumPy的示例代码。首先,我需要回顾用户提供的引用内容,看看有没有相关的信息可以利用。 用户提供的引用中有几个提到了NumPy数组的操作,比如引用[2]和引用[5]讨论了MaskedArray的使用,这可能与数组的输入输出相关吗?不过用户的问题更偏向基础的输入输出,可能需要更基础的示例。 用户提到array模块(引用[3]),但用户可能更关注NumPy而不是Python内置的array模块。引用[4]提到了在NumPy数组中搜索序列,这可能不太相关,但可以暂时记下。 接下来,我需要整理Python中数组的输入输出方法,尤其是使用NumPy的情况。输入方面,常见的包括从列表转换、文件读取(如CSV、TXT)、生成特殊数组(zeros, ones)。输出方面,转换为列表、保存到文件、格式化输出等。 然后要考虑如何将这些方法用示例代码展示。例如,从列表创建数组,使用np.array();从文件读取使用np.loadtxt();输出使用print或者np.savetxt()。同时,是否需要处理掩码数组?引用[2]中的MaskedArray可能是一个高级应用,但用户的问题可能更基础,所以可能不需要深入,但可以简要提及。 另外,用户提供的示例代码可能需要包括输入和输出的完整流程,比如输入一个列表,转换成NumPy数组,处理后再输出。还要注意代码的正确性,比如使用正确的函数和参数。 可能需要检查是否有遗漏的方法,比如使用input函数获取用户输入,然后转换为数组。例如,用户输入一串数字,分割后转为数组。这在引用[4]中提到了input数组,但具体实现可能需要用split和np.array转换。 最后,生成相关问题,要围绕数组的输入输出,可能涉及性能、不同数据格式的处理、异常处理等。需要确保问题相关且有价值。 总结步骤: 1. 输入方法:列表转换、文件读取、生成函数、用户输入处理。 2. 输出方法:转换为列表、保存文件、打印格式化。 3. 示例代码涵盖主要方法。 4. 相关问题围绕输入输出扩展,如性能优化、不同格式处理、错误处理等。 5. 引用合适的参考资料,如引用[2]关于MaskedArray的输出示例,引用[5]关于reshape可能影响输出结构,但可能不直接相关,需看是否有必要提及。</think>### Python中数组的输入与输出方法详解 #### 一、数组的输入方法 1. **从列表/元组创建数组** 使用$np.array()$将Python列表或元组转换为NumPy数组: ```python import numpy as np data_list = [1, 2, 3, 4] arr = np.array(data_list) ``` 2. **从文件读取数组** - 读取CSV/TXT文件: ```python arr = np.loadtxt(&#39;data.csv&#39;, delimiter=&#39;,&#39;) # 读取CSV arr = np.genfromtxt(&#39;data.txt&#39;) # 读取文本 ``` - 读取二进制文件(高效存储): ```python arr = np.fromfile(&#39;data.bin&#39;, dtype=np.float32) ``` 3. **生成特殊类型数组** ```python zeros_arr = np.zeros((2,3)) # 全零数组 ones_arr = np.ones((3,3)) # 全一数组 random_arr = np.random.rand(2,2) # 随机数组 ``` 4. **通过用户输入动态创建** 从控制台输入数据并转换: ```python user_input = input("输入数字(用空格分隔): ") data = list(map(float, user_input.split())) arr = np.array(data) ``` --- #### 二、数组的输出方法 1. **直接打印数组** ```python print(arr) # 输出格式:[[1 2][3 4]] ``` 2. **保存到文件** - 保存为文本文件: ```python np.savetxt(&#39;output.txt&#39;, arr, fmt=&#39;%.2f&#39;) # 指定格式 ``` - 保存为二进制文件: ```python arr.tofile(&#39;output.bin&#39;) ``` 3. **转换为Python原生类型** ```python list_from_arr = arr.tolist() # 将NumPy数组转为列表 ``` 4. **格式化输出掩码数组** 处理缺失值时使用$np.ma.MaskedArray$(如引用[2]中的示例): ```python masked_arr = np.ma.masked_where(arr == 0, arr) print(masked_arr) # 输出时会自动标记无效值 ``` --- #### 三、完整示例代码 ```python import numpy as np # 输入:用户输入创建数组 input_str = input("输入二维数组(行间用分号,数字用空格): ") rows = [list(map(float, row.split())) for row in input_str.split(&#39;;&#39;)] arr = np.array(rows) # 输出:打印并保存 print("NumPy数组:\n", arr) np.savetxt(&#39;output.csv&#39;, arr, delimiter=&#39;,&#39;, fmt=&#39;%d&#39;) # 输出掩码数组示例(引用[2]) masked_arr = np.ma.masked_where(arr > 100, arr) print("掩码数组:\n", masked_arr) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Think@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值