2

有没有办法在 numpy 中定义一个具有不同长度行的矩阵(比如m),但是这样m保持二维(iemndim = 2)?

例如,如果您定义m = numpy.array([[1,2,3], [4,5]]),则m.ndim = 1。我理解为什么会发生这种情况,但如果有的话我很感兴趣任何欺骗 numpy 将m视为 2D 的方法。一个想法是用一个虚拟值填充,以便行变得相同大小,但我有很多这样的矩阵,它会占用太多空间。我真的需要m是 2D 的原因是我正在使用 Theano,并且将被赋予m值的张量期望一个 2D 值。

4

2 回答 2

2

我将在这里提供有关 Theano 的非常新的信息。我们有一个新的 TypedList() 类型,它允许拥有所有具有相同类型的元素的 python 列表:比如 1d ndarray。一切都完成了,除了文档。

您可以使用它们执行的功能有限。但是我们这样做是为了允许使用 scan 遍历类型列表。它尚未与扫描集成,但您现在可以像这样使用它:

import theano
import theano.typed_list

a = theano.typed_list.TypedListType(theano.tensor.fvector)()
s, _ = theano.scan(fn=lambda i, tl: tl[i].sum(),
                   non_sequences=[a],
                   sequences=[theano.tensor.arange(2, dtype='int64')])

f = theano.function([a], s)
f([[1, 2, 3], [4, 5]])

一个限制是 scan 的输出必须是 ndarray,而不是类型列表。

于 2014-06-13T13:26:46.603 回答
1

不,这是不可能的。NumPy 数组的每一对维度都需要是矩形的。这是由于它们映射到内存缓冲区的方式,如指针、项目大小、步幅三倍。

至于这个占用空间:np.array([[1,2,3], [4,5]])实际上比 2×3 的数组占用更多的空间,因为它是一个包含两个指向 Python 列表的指针的数组(即使将元素转换为数组,内存布局仍然是低效的)。

于 2014-06-13T10:47:55.023 回答