将Matlab代码转换为Python的问题

时间:2015-11-09 14:18:44

标签: python matlab

您好我想在python中转换两段matlab代码。

我尝试做:

~isnan(matr(:,2)) into not(isnan(matr[:,1]))

但它会返回此错误:

not(isnan(matr[:,1]))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

,第二个是:

[a,b] = min(d);

我尝试做:

a,b = d.min(0)

但它会返回此错误:

a,b = d.min(0)
ValueError: need more than 1 value to unpack

非常感谢您的支持

2 个答案:

答案 0 :(得分:0)

对于问题1,您没有使用正确的索引语法:

>>> from numpy import *
>>> c = ( (1,2) , (3, 4))
>>> x = isnan(c[:][1])
>>> x[0]
False
>>> x[1]
False

对于问题2:

>>> d = [[1,2],[3,4]]   
>>> a,b=min(d)          
>>> a                   
1                       
>>> b                   
2            

答案 1 :(得分:0)

1有几个问题。首先,not不是一个函数,它是一个运算符,所以你不会not(foo),你会not foonot(foo)有效,但这是因为它正在使用(...)进行分组,在您的情况下,它不会执行任何操作。

更大的问题是,notandor等运营商是短路运营(他们在首次故障后停止运营),这不起作用正确使用numpy数组。您需要使用按位运算符~,例如~isnan(matr[:,1])

对于第二个问题,我认为你试图将MATLAB等效于获得最小值和最小值的索引?在numpy中,这些是两个不同的操作,分别是minargmin。 Python不支持基于其输出参数更改函数的行为(至少不以任何简单的方式)。