我希望所有的numpy数组都被强制为二维

时间:2019-02-22 06:24:25

标签: python arrays numpy

我是从Matlab过来的,尽管大多数东西都移植得非常好(为此必须感谢社区,但Matlab许可的费用超过1000美元)。我一生无法发现的一件事。

在Matlab中,所有阵列都是2D的(直到最近,它们为您提供了其他选择)。这样,当我定义标量,数组,矩阵时,它们都被视为2D。这在进行矩阵乘法时非常有用!

在Python中,当使用numpy时。不幸的是,我发现自己不得不经常使用reshape命令。

无论如何,除非另有说明,否则我是否可以全局设置所有数组的二维尺寸?

编辑: 根据numpy文档,numpy.matrix可能会在将来删除。我本质上想做的就是让所有numpy操作的所有输出都自动应用 np.atleast_2d 功能。

2 个答案:

答案 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]])