我正在将代码从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.如果我是正确的并且它不起作用,如何转换代码?
答案 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