我有一大堆包含numpy数组作为属性的对象。它们每个都有操纵数组的方法。我想创建一个2D numpy数组,该数组存储其他数组并在操纵各个numpy数组时进行更新。
使用列表很容易做到这一点,因为您只需要创建对其他列表的引用列表即可。
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> z = [x,y] # stores reference to x and y
>>> x[0] = 10
>>> z
[[10,2,3],[4,5,6]]
但是,在numpy中执行相同操作会创建对象的副本。
>>> x = np.array([1,2,3])
>>> y = np.array([4,5,6])
>>> z = np.array([x,y]) # setting the optional argument copy = False didn't help either
>>> id(x)
140673084678272
>>> id(z[0])
140673084678512
我猜测设置copy = False
无效,因为我传递了一个以前不存在的新的串联列表对象。有没有一种方法可以创建z
,其中元素是对numpy数组x
和y
的引用?
我认识到numpy中的引用通常是用views
完成的,但这似乎是一个不同的用例。创建单个numpy数组的视图对象非常简单,但是我不确定如何将N个单独的numpy数组中的N个视图对象存储在numpy数组中。
答案 0 :(得分:0)
一种解决方案是将某些尺寸匹配的stack()或concatenate()数组。 如果暗淡不匹配-使用填充,将尺寸存储在单独的列表中,然后堆叠。