首页 文章

numpy中行长不同的矩阵

提问于
浏览
2

有没有一种方法可以用不同长度的行来定义numpy中的矩阵(比如说m),但是m保持2维(即m.ndim = 2)?

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

2 回答

  • 1

    不,这是不可能的 . NumPy数组在每对维度中都需要是矩形的 . 这是由于它们映射到内存缓冲区的方式,作为指针,itemsize,stride triple .

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

  • 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,而不是类型列表 .

相关问题