将matlab中的find()转换为python

时间:2017-07-08 15:08:06

标签: python matlab python-2.7 numpy image-processing

我正在将代码从Matlab转换为Python。 Matlab中的代码是:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "app_dev",
                "_type": "owner",
                "_id": "9",
                "_score": 1.0,
                "_source": {
                    "name": "Demo Name",
                    "created": "2017-06-30T22:46:47+02:00",
                    "shops": [
                        {
                            "name": "Shop 1 ",
                            "address": {
                                "city": "Test",
                                "street": "Teststreet 123",
                                "zip": "1234"
                            }
                        },
                        {
                            "name": "Shop 2",
                            "address": {
                                "city": "Test",
                                "street": "Teststreet 123",
                                "zip": "1234"
                            }
                        },
                        {
                            "name": "Shop 3",
                            "address": {
                                "city": "Test",
                                "street": "Teststreet 123",
                                "zip": "1234"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

两个数组的大小相同,我基本上都在创建一个掩码。

我读到here numpy中的非零()等同于find(),所以我使用了它。在Python中,我有sstdge的dstc和sNorm的dst。我也直接输入lowT = 60.所以代码是

但是,我得到以下错误:

x = find(sEdgepoints > 0 & sNorm < lowT);
sEdgepoints(x)=0;

我读到了a.any()/ a.all()in this post的用法,我不确定它是如何工作的。所以,我有两个问题: 1.如果是,使用哪个阵列? 2.如果我是正确的并且它不起作用,如何转换代码?

3 个答案:

答案 0 :(得分:2)

试试np.argwhere()  (并注意()围绕不等式的重要性:

>>X=np.array([1,2,3,4,5])
>>Y=np.array([7,6,5,4,3])
>>ans = np.argwhere((X>3) & (Y<7))
>>ans 

array([[3],
   [4]])

答案 1 :(得分:1)

and执行布尔运算,numpy期望你按位操作,所以你必须使用&

x = np.nonzero((dstc > 0) & ( dst < 60))

答案 2 :(得分:0)

你可以自己实现它:

example.com/blog

将为您提供与匹配约束相对应的列表列表。 我想这可能不是你想要的。

也许看看pandas模块,它使得屏蔽比普通的python或numpy更舒服: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html