我正在尝试找到合适的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]))
答案 0 :(得分:4)
虽然订单和索引条件不同,但两种方法都提供相同的答案。
数组的Python索引从0
开始,就像在C中一样,而matlab的索引从1
开始。
此外,两个输出(通过matlab和numpy)确实相互对应 modulo 这些术语的排列。可能这是由于不同的索引实现。
你可以看到matlab按行遍历你的矩阵,而行则是numpy。