[英]Python zip numpy arrays of different dimension
我想压缩numpy数组,以便通过np.save
保存它。 为了压缩一维数组,我使用了
import numpy as np
a = np.ones(4) * 5.
b = np.ones(4) * 4.
data = np.array(zip(a, b))
正是我想要的。 现在我有更多数据,像
c = numpy.ones((2, 4))
但
data = np.array(zip(a, b, c))
不起作用。 我可以做
data = np.array(zip(a, b, c[0], c[1]))
而是c
的“深度”发生了变化。 我的解决方案是
data = np.insert(c, 0, b, axis=0)
data = np.insert(data, 0, a, axis=0)
data = zip(*data)
但这有点次优。 感谢您的建议。
我会使用numpy.hstack / vstack:
a = np.ones(4) * 5
b = np.ones(4) * 4
c = np.ones((2, 4))
data = np.vstack([a,b,c]).T
编辑:实际上,我现在主要使用np.row_stack / column_stack,因为我发现它比hstack或vstack更自然:
data = np.column_stack([a,b,c.T])
调用zip
时,使用*
运算符对c
进行“解压缩”:
data = np.array(zip(a, b, *c))
data.shape
=> (4, 4)
(您可以避免使用zip
, vstack
使用直接的numpy方法(例如,使用vstack
,如@metaperture建议),这可以说是一种更好的方法。但是,此答案说明了正确地执行您最初尝试做的事情的正确方法。
如果您的唯一目标是保存多个不同维度的数组,那么我不建议您使用zip
,正如该问题的标题所暗示的那样。 请改用np.savez
或np.savez_compressed
。 这些功能旨在保存多个(任意尺寸)数组。
使用zip
特别糟糕,因为它不会移植到Python3 ,在zip3中zip
返回一个迭代器,而不是一个元组列表。 在迭代器上调用np.array
会创建一个仅包含np.array
object
元素的数组,这可能不是您想要的。 保存和加载后,我无法恢复压缩的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.