小编ala*_*ani的帖子

numpy:对操作结果执行“任何”或“全部”的有效方法

假设您有两个 NumPy 数组ab,并且您想测试 的任何值a是否大于 的对应值b

现在你可以计算一个布尔数组并调用它的any方法:

(a > b).any()
Run Code Online (Sandbox Code Playgroud)

这将在内部完成所有循环,这很好,但是即使第一个结果评估为 ,也需要对所有对执行比较True

或者,您可以对标量比较进行显式循环。在ab形状相同(因此不需要广播)的情况下的示例实现可能如下所示:

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)

如果存在这样的东西,就能够动态创建函数而言,它显然可以有其他用途,而不是对alland 进行有效评估any

有这样的吗?

python arrays numpy

5
推荐指数
1
解决办法
80
查看次数

获取布尔数组,指示数组中哪些元素属于列表

这似乎是一个简单的问题,但我很长一段时间以来都在为错误而苦苦挣扎。想象一个数组

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 arrays numpy list

3
推荐指数
1
解决办法
159
查看次数

python subprocess - 分离进程

我有一个 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

python subprocess

3
推荐指数
1
解决办法
4192
查看次数

在正则表达式中使用组时 re.findall() 和 re.finditer() 之间的区别?

考虑以下字符串

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)

python regex text regex-group

1
推荐指数
1
解决办法
1403
查看次数

如何在Python中交错两个列表中的元素

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 datetime list

0
推荐指数
1
解决办法
699
查看次数

标签 统计

python ×5

arrays ×2

list ×2

numpy ×2

datetime ×1

regex ×1

regex-group ×1

subprocess ×1

text ×1