Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'

本文介绍了如何使用Python的scipy.io.savemat()函数来保存高维数组,并在MATLAB中加载这些数组。文章通过示例代码展示了保存过程,并解释了Python与MATLAB之间的数组维度转换。

Python保存数组的方式有很多种,如savetxt,但这个函数只能保存一维或二维数组。为了保存高维数组,同时能够在matlab载入,可以使用scipy.io.savemat()函数,例子:

import numpy as np
import scipy.io as sio
A = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])
print A
print A.shape
sio.savemat('data.mat', {"foo":A})

得到输出:
这里写图片描述
在matlab中导入该数组:

>>load('data.mat')

这里写图片描述
可以看到,matlab与Python对矩阵的保存上有一定的变换,从Python到matlab为:’页’->’行’,’行’->’列’,’列’->’页’,即在Python中的矩阵形状为3×4×5,在matlab中变为5×3×4

另外,在Python中如果保存成.mat文件时代码为:sio.savemat('data.mat', A),则会报错AttributeError: 'numpy.ndarray' object has no attribute 'items'

### 解决 Numpy 数组中 `AttributeError: 'numpy.ndarray' object has no attribute 'isna'` 的问题 在 NumPy 中,`ndarray` 对象并不支持像 Pandas Series 或 DataFrame 那样的内置方法(如 `isna()`)。因此,在尝试对 NumPy 数组调用 `isna()` 方法时会引发 `AttributeError` 错误。为了正确检查 NumPy 数组中的缺失值,可以采用以下几种替代方案。 --- #### 使用 `np.isnan()` 检测 NaN 值 对于浮点数类型的数组,`np.isnan()` 是一种常用的方式来检测其中的 NaN 值。该函数返回一个布尔型数组,标记出所有为 NaN 的位置。 ```python import numpy as np arr = np.array([1, 2, np.nan, 4]) nan_mask = np.isnan(arr) print(nan_mask) # 输出: [False False True False] ``` 此方法适用于包含浮点数类型的数据[^1]。 --- #### 结合逻辑运算符扩展检测范围 当数组不仅包含 NaN 而且还可能存在其他形式的缺省值(例如空字符串或自定义标志)时,可结合多个条件进行综合判断。 ```python arr_mixed = np.array([1, "", None, np.nan], dtype=object) # 判断是否为 None 或 NaN none_or_nan_mask = np.vectorize(lambda x: x is None or (isinstance(x, float) and np.isnan(x)))(arr_mixed) print(none_or_nan_mask) # 输出: [False True True True] ``` 这种方法利用了 Python 的原生对象特性,并通过矢量化操作实现高效的批量计算[^2]。 --- #### 自定义函数处理复杂情况 针对更复杂的场景,比如数据类型多样或者需要额外业务逻辑的情况下,编写自定义函数可能是更好的选择。 ```python def check_missing(value): if isinstance(value, float) and np.isnan(value): # 浮点型 NaN return True elif value is None: # PythonNone 类型 return True elif str(value).strip() == "": # 空字符串 return True else: return False custom_mask = np.vectorize(check_missing)(arr_mixed) print(custom_mask) # 输出: [False True True True] ``` 这种灵活性使得即使面对混合类型的数据也能准确找出潜在的缺失项[^1]。 --- #### 注意事项 尽管以上提到的各种技术能够有效地识别不同种类的丢失信息,但在实际应用过程中仍需注意几点: - 数据类型一致性:某些方法只适合特定的数据结构; - 计算效率考量:随着样本规模增大,简单循环可能会变得低效,应优先选用向量化的解决方案; - 特殊编码解释:如果原始资料里采用了特殊的符号代表未知状态,则必须事先将其映射成通用的标准格式以便统一管理[^3]。 --- ### 总结 虽然 NumPy 不具备直接类似于 Pandas 的 `isna()` 功能,但凭借其强大的基础库支持完全可以构建出功能相当甚至更为灵活的缺失值探测手段。根据具体需求选取合适的策略即可顺利完成任务。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值