【发布时间】:2021-12-01 04:02:37
【问题描述】:
我正在尝试堆叠存储在字典中的 numpy 数组。到目前为止,我找到了几种方法来做到这一点。不幸的是,最优雅的代码会打印出 FutureWarning:
sys:1: FutureWarning: arrays to stack must be passed as a "sequence" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.
.
代码示例No.1(不给出警告,但是太麻烦了):
data_stack = np.stack([data_matrix[0], data_matrix[1], data_matrix[2], data_matrix[3], data_matrix[4], data_matrix[5], data_matrix[6], data_matrix[7], data_matrix[8], data_matrix[9], data_matrix[10], data_matrix[11]], axis=1)
.
代码示例 No.2(更简洁,仍然没有给出警告):
data_stack = np.stack([data_matrix[key] for key in data_matrix.keys()], axis=1)
.
代码示例 No.3(我最喜欢这个,但它给出了警告):
data_stack = np.stack(data_matrix.values(), axis=1)
我已尝试按如下方式解决此问题:
data_stack = np.stack([data_matrix.values()], axis=1)
但这似乎完全破坏了代码:
Traceback (most recent call last):
File "./CLN40ULPEF_PttV1350W1350G0000S0000T025.lib.py", line 261, in <module>
data_stack = np.stack([data_matrix.values()], axis=1)
File "<__array_function__ internals>", line 5, in stack
File "/usr/lib64/python3.9/site-packages/numpy/core/shape_base.py", line 430, in stack
axis = normalize_axis_index(axis, result_ndim)
numpy.AxisError: axis 1 is out of bounds for array of dimension 1
.
有没有一种(简单的)方法可以让data_matrix.values() 与numpy.stack 一起工作而不发出警告?
【问题讨论】:
-
你可能会做
list(data_matrix.values()),但当然任何类型的操作都会增加计算时间。 -
@mapf,在此处添加
list不会浪费时间。stack遍历输入参数的所有元素,添加一个维度。 -
@hpaulj 很高兴知道,谢谢!
-
将
dict.values()扩展为完整列表是正常的。