有没有一种方法可以在numpy中定义一个矩阵(比如 m ),其中包含不同长度的行,但 m 保持二维(iemndim = 2) )?
例如,如果您定义 m = numpy.array([[1,2,3],[4,5]]),那么 m.ndim = 1.我明白为什么会发生这种情况,但我很感兴趣,如果有任何方法可以将numpy视为以二维方式查看 m 。一个想法是使用虚拟值填充,以便行变得大小相同,但是我有很多这样的矩阵,它会占用太多空间。我真正需要 m 成为2D的原因是我正在使用Theano,并且将给出 m 值的张量期望2D值。
答案 0 :(得分:2)
我将在此提供有关Theano的新信息。我们有一个新的TypedList()类型,它允许python列表包含所有具有相同类型的元素:如1d ndarray。除文档外,一切都已完成。
您可以使用它们执行的功能有限。但我们这样做是为了允许使用扫描循环键入列表。它尚未与扫描集成,但您可以像现在这样使用它:
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]])
一个限制是扫描输出必须是ndarray,而不是类型列表。
答案 1 :(得分:1)
不,这是不可能的。 NumPy数组在每对维度中都需要是矩形的。这是由于它们映射到内存缓冲区的方式,作为指针,itemsize,stride triple。
至于这个占用空间:np.array([[1,2,3], [4,5]])
实际占用的空间比2×3数组多,因为它是一个包含两个Python列表指针的数组(即使元素转换为数组,内存也是如此)布局仍然效率低下。)