假设您有两个 NumPy 数组a
和b
,并且您想测试 的任何值a
是否大于 的对应值b
。
现在你可以计算一个布尔数组并调用它的any
方法:
(a > b).any()
Run Code Online (Sandbox Code Playgroud)
这将在内部完成所有循环,这很好,但是即使第一个结果评估为 ,也需要对所有对执行比较True
。
或者,您可以对标量比较进行显式循环。在a
和b
形状相同(因此不需要广播)的情况下的示例实现可能如下所示:
any(ai > bi for ai, bi in zip(a.flatten(), b.flatten()))
Run Code Online (Sandbox Code Playgroud)
这将受益于在True
遇到第一个结果后停止处理的能力,但与 Python 中的显式循环相关的所有成本(尽管在理解中)。
有没有什么办法,无论是在 NumPy 本身还是在外部库中,您都可以传入您希望执行的操作的描述,而不是该操作的结果,然后让它在内部执行操作(以优化的方式)低级代码)在一个“任何”循环中,可以从中打破?
人们可以假设某种界面,例如:
from array_operations import GreaterThan, Any
expression1 = GreaterThan('x', 'y')
expression2 = Any(expression1)
print(expression2.evaluate(x=a, y=b))
Run Code Online (Sandbox Code Playgroud)
如果存在这样的东西,就能够动态创建函数而言,它显然可以有其他用途,而不是对all
and 进行有效评估any
。
有这样的吗?
这似乎是一个简单的问题,但我很长一段时间以来都在为错误而苦苦挣扎。想象一个数组
a = np.array([2,3,4,5,6])
Run Code Online (Sandbox Code Playgroud)
我想测试数组中的哪些元素属于另一个列表
[2,3,6]
Run Code Online (Sandbox Code Playgroud)
如果我做
a in [2,3,6]
Run Code Online (Sandbox Code Playgroud)
Python 引发“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”
作为回报,我想得到一个类似布尔数组的
array([ True, True, False, False, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud) 我有一个 python 脚本af_audit_run.py
,它request_audit.py
通过调用另一个 python 脚本subprocess
。
第二个脚本request_audit.py
在后台调用另一个子进程并返回请求 ID。
问题是第一个脚本af_audit_run.py
(应该在第二个脚本返回请求 id 后立即退出)正在等待整个后台进程完成。有没有什么方法可以强制第一个脚本在请求 id 返回后立即退出?
af_audit_run.py
-- 使用以下方法等待结果communicate
:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result, error = p.communicate()
print(result.decode('utf-8'))
print(error.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
request_audit.py
-- 不等待,只需分离子进程(第三个 python 脚本)并返回请求 id:
subprocess.Popen(cmd, shell=True, stdout=None, stderr=None, close_fds=True)
print(request_id)
Run Code Online (Sandbox Code Playgroud)
环境:Linux
考虑以下字符串
text2 = '''
Mr. Schafer
Mr Smith
Ms Davis
Mrs. Robinson
Mr. T
'''
Run Code Online (Sandbox Code Playgroud)
我希望正则表达式能够匹配完整的姓名,例如“先生”。以谢弗为例
使用 finditer():
matches = re.finditer(r'(Mr|Ms|Mrs)\.?\s[A-Z]\w*', text2)
for match in matches:
print(match)
Run Code Online (Sandbox Code Playgroud)
结果:
<_sre.SRE_Match object; span=(1, 12), match='Mr. Schafer'>
<_sre.SRE_Match object; span=(13, 21), match='Mr Smith'>
<_sre.SRE_Match object; span=(22, 30), match='Ms Davis'>
<_sre.SRE_Match object; span=(31, 44), match='Mrs. Robinson'>
<_sre.SRE_Match object; span=(45, 50), match='Mr. T'>
Run Code Online (Sandbox Code Playgroud)
finditer() 给出了我想要的结果,但不在列表中。
但是当我使用 findall() 时:
re.findall(r'(Mr|Ms|Mrs)\.?\s[A-Z]\w*', text2)
Run Code Online (Sandbox Code Playgroud)
结果:
['Mr', 'Mr', 'Ms', 'Mrs', 'Mr']
Run Code Online (Sandbox Code Playgroud)
为什么是这样?如何使用 findall() 获得我想要的结果
我想要这个结果:
['Mr. Schafer', 'Mr Smith', 'Ms …
Run Code Online (Sandbox Code Playgroud) list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
list3 = list1 + list2
print(list3)
output ---
['a', 'b', 'c', 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但我想要这样的输出 ---
['a',1,'b',2,'c',3]
Run Code Online (Sandbox Code Playgroud)
请帮我
python ×5
arrays ×2
list ×2
numpy ×2
datetime ×1
regex ×1
regex-group ×1
subprocess ×1
text ×1