在python中替换matlab查找函数

时间:2014-03-05 15:16:56

标签: python matlab python-2.7 numpy

我正在尝试找到合适的python函数来替换我的脚本中的matlab find,并且通过一些谷歌搜索,我看到np.where()在大多数时间内解决了目的。但是在双重条件的情况下,我有不同的输出。谁能告诉我这种方法有什么问题以及如何继续?示例代码和差异如下。

对于matlab:

b = [1, 2, 3; 1, 2, 3; 1, 2, 3]
[I, J] = find(( b > 1) & (b <= 3))

提供输出

I =                 J = 
     1                 2
     2                 2
     3                 2
     1                 3
     2                 3
     3                 3

如果是python:

b= array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

>>> np.where((b > 1) & (b <= 3))
(array([0, 0, 1, 1, 2, 2]), array([1, 2, 1, 2, 1, 2]))

1 个答案:

答案 0 :(得分:4)

虽然订单和索引条件不同,但两种方法都提供相同的答案。

数组的Python索引从0开始,就像在C中一样,而matlab的索引从1开始。

此外,两个输出(通过matlab和numpy)确实相互对应 modulo 这些术语的排列。可能这是由于不同的索引实现。

你可以看到matlab按行遍历你的矩阵,而行则是numpy。