我有一段从MATLAB转换成python的代码。它还没有以一种非常蟒蛇的方式来写,但我会在稍后的阶段修改它。
MATLAB脚本具有通信系统工具箱中的函数vec2mat。(请参见http://www.mathworks.co.uk/help/comm/ref/vec2mat.html)通过指定要转换的向量和要具有的列数,将向量更改为矩阵,可以实现此操作。mat = vec2mat(vec,matcol)
我通常只使用numpy.reshape。但是,如果向量中没有足够的值来完全填充最后一行,vec2mat会将零添加到最后一行。
我需要的填充将根据我输入的csv文件而变化。

    atbmat = vec2mat(atbvec,nb);

在本例中,nb是5,atbvec的长度是4806。因此,在最下面一行加上四个零。
如何在python中添加额外的零来创建2D数组?我会让长度为4806的一维数组atbvecnb等于5(我想要nb列)。
谢谢你的建议,我希望这有意义。
编辑
     dim=len(atbvec)/int(nb)
     atbvec=np.array(atbvec)
     atbvec=np.copy(atbvec)
     atb_mat=atbvec.resize((dim,nb)

这将返回None

最佳答案

您可以使用resize()对象的numpy.ndarray方法:

import numpy as np

a = np.array([1,2,3])
a.resize(2,3)
print a
#array([[1, 2, 3],
#       [0, 0, 0]])

编辑:
注意a是扩展的,这意味着原始数组现在有一个对额外的连续内存块的引用。
在您的案例中,基于注释,您可以先前创建一个副本:
atb_mat = atbvec.copy()
atb_mat.resize(dim, nb)

或者,最好使用in-place来获得不带参考的全新阵列:
atb_mat = numpy.resize(atbvec, (dim, nb))

不过,在这种情况下,数组将使用numpy.resize中以前的值填充,例如:
a = np.array([1,2,3])
b = np.resize(a, (3, 4))
#array([[1, 2, 3, 1],
#       [2, 3, 1, 2],
#       [3, 1, 2, 3]])

请查看是否复制内存块,直到它填充新的连续大小。

关于python - 与MATLAB vec2mat等效的Python代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18528731/

10-12 19:33