如何避免使用numpy.stack时传入字典values触发FutureWarning
解决方案
直接将dict.values()返回的视图对象显式转为列表即可,写法和你偏好的样式几乎一致:
data_stack = np.stack(list(data_matrix.values()), axis=1)
原理说明
- 告警触发原因:Python 3 中
dict.values()返回的是字典值视图对象,不属于NumPy要求的列表、元组这类序列类型,属于被废弃支持的非序列可迭代对象,因此触发FutureWarning。 - 之前修改报错的原因:你尝试的
[data_matrix.values()]写法是把整个视图对象作为单个元素塞进列表,此时传入np.stack的列表长度为1,堆叠后只能得到1维数组,指定axis=1自然会触发维度越界错误。
补充说明
如果你使用的Python版本低于3.7(字典不保证插入顺序),需要按key的顺序堆叠数组,可以用如下写法保证顺序和硬编码写法一致:
data_stack = np.stack([data_matrix[k] for k in sorted(data_matrix.keys())], axis=1)
内容的提问来源于stack exchange,提问作者Boris L.
相关产品推荐
相关产品推荐

