我正试图翻译一段' 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应该是什么。但是它太挑剔了,因为我还有另外一个声明就像使用矩阵作为索引一样。你能举个例子告诉我如何解决这个问题吗?非常感谢!
答案 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 - 但其他形状维度不会改变。