我有一段从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的一维数组
atbvec
和nb
等于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/