繁体   English   中英

不同维数的python zip numpy数组

[英]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)

(您可以避免使用zipvstack使用直接的numpy方法(例如,使用vstack ,如@metaperture建议),这可以说是一种更好的方法。但是,此答案说明了正确地执行您最初尝试做的事情的正确方法。

如果您的唯一目标是保存多个不同维度的数组,那么我建议您使用zip ,正如该问题的标题所暗示的那样。 请改用np.saveznp.savez_compressed 这些功能旨在保存多个(任意尺寸)数组。

使用zip特别糟糕,因为它不会移植到Python3 ,在zip3zip返回一个迭代器,而不是一个元组列表。 在迭代器上调用np.array会创建一个仅包含np.array object元素的数组,这可能不是您想要的。 保存和加载后,我无法恢复压缩的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM