我是从Matlab过来的,尽管大多数东西都移植得非常好(为此必须感谢社区,但Matlab许可的费用超过1000美元)。我一生无法发现的一件事。
在Matlab中,所有阵列都是2D的(直到最近,它们为您提供了其他选择)。这样,当我定义标量,数组,矩阵时,它们都被视为2D。这在进行矩阵乘法时非常有用!
在Python中,当使用numpy时。不幸的是,我发现自己不得不经常使用reshape命令。
无论如何,除非另有说明,否则我是否可以全局设置所有数组的二维尺寸?
编辑: 根据numpy文档,numpy.matrix可能会在将来删除。我本质上想做的就是让所有numpy操作的所有输出都自动应用 np.atleast_2d 功能。
答案 0 :(得分:2)
如上所述,np.matrix类的语义与Matlab数组非常相似。
但是,如果您的目标是学习numpy作为一种可销售的技能,那么我强烈建议您完全接受ndarray的概念;虽然将numpy称为matlab的端口有一些历史真相,但这是一种侮辱,因为ndarray是numpy优于matlab的最引人注目的客观概念改进之一,除了价格方面。
TLDR;如果您声称知道numpy,将很难不让您的应用程序被我折腾,但是您的代码示例无论如何都闻起来像移植的matlab。
答案 1 :(得分:0)
您可以使用np.matrix代替np.array来定义2D矩阵。例如:
np.matrix('1 2; 3 4')
np.matrix([[1, 2], [3, 4]])
要将数组转换为矩阵,请使用np.asmatrix:
a = np.array([[1, 2], [3, 4]])
m = np.asmatrix(a)
但是正如hpaulj在评论中提到的那样,请注意:
不再建议使用此类,即使对于线性 代数而是使用常规数组。该类将来可能会被删除。
因此,习惯使用numpy数组是一个好主意。看看这个教程 https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html
要将标量或1D数组转换为2D数组,请使用np.atleast_2d函数
np.atleast_2d(3.0)
array([[ 3.]])
np.atleast_2d([1, 2, 3])
array([[1, 2, 3]])