使用空矩阵作为numpy

时间:2017-01-24 22:18:30

标签: python numpy

我正试图翻译一段' for'循环代码从Matlab到Python。此块中有一条陈述:A[B]=C。所有这三个A,B和C都是矩阵。在python中,我需要写为A[B-1]=C,因为Matlab和Python之间的索引标准不同。   当B非空时,这个语句在python中运行良好。但是,如果B为空,则此语句如下:

A11 = np.copy(A[:,B-1]) #Remind that B is an empty matrix, like B=np.array([0])

IndexError:用作索引的数组必须是整数(或布尔)类型

实际上,如果B为空,我想要的矩阵A11只是另一个空矩阵。当B是空矩阵时,我肯定可以使用if块来定义矩阵A11应该是什么。但是它太挑剔了,因为我还有另外一个声明就像使用矩阵作为索引一样。你能举个例子告诉我如何解决这个问题吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

B = np.array([0])不生成空矩阵,只是将列表[0]转换为numpy数组。

我想你的意思是B = np.zeros(0)(其中参数是一个形状)。 Numpy的默认值是dtype =float64但是为了使用数组来索引整数或布尔类型是必需的。对于非空数组,其值实际上是整数numpy指出它只能更改dtype

要解决您的问题,您可以在初始化时简单地指定dtype(to int或boolean),即B = np.zeros(0, dtype=np.int)正常工作。 A将成为一个“空矩阵”,因为它的一个形状维度为0 - 但其他形状维度不会改变。