Python 使用';out=…';

Python 使用';out=…';,python,performance,numpy,Python,Performance,Numpy,我有一个字符串数组: s = np.array(['a', 'b', 'c']) 我想让一个函数array\u等于\u scalar,将s与字符串'a'进行比较,并将输出写入预分配的数组(我需要快速性能): 因此,我预计掩码将是 > [True False False] 是否有任何方法可以使数组等于标量?您需要的是,它似乎不适合您的用例 为了以您想要的方式使用它,我们需要显式地将要比较的标量广播到适当形状的numpy数组中: import numpy as np a = np.arr

我有一个字符串数组:

s = np.array(['a', 'b', 'c'])
我想让一个函数
array\u等于\u scalar
,将
s
与字符串
'a'
进行比较,并将输出写入预分配的数组(我需要快速性能):

因此,我预计
掩码将是

> [True False False]

是否有任何方法可以使数组等于标量?

您需要的是,它似乎不适合您的用例

为了以您想要的方式使用它,我们需要显式地将要比较的标量广播到适当形状的numpy数组中:

import numpy as np

a = np.array(['a','b','c'])
res = np.empty(a.shape, dtype=bool)
np.equal(a, np.broadcast_to(['a'], a.shape), out=res)
不幸的是,上面的调用(1)忽略广播并给出一个恒定的结果,(2)未实现。我们可以尝试分配适当的比较数组来强制执行适当的元素级比较,但没有效果:

>>> compare = np.full(a.shape, 'a')
>>> np.equal(a, compare)
NotImplemented

似乎通过numpy
ufunc
s的高效实现只针对数字类型(我还没有时间查看源代码)。但我不希望更高级别的函数能够直接使用预先分配的输入数组作为缓冲区。对于编译好的ufunc,我可以想象,
out
关键字参数可以让您绕过临时数组的创建,但我认为这里没有其他替代方法。

a'==np.array(['a','b','c'])有什么问题。
?尝试
'a'==np.array(['a','b','c'])
,输出应该是
数组([True,False,False])
;如果你想把
mask
变成一个
list
,那么就把结果转换成一个list。你确定分配是你的性能瓶颈吗?@drooze我想要快速性能,s==np.array['a','b','c']将在内存中创建新数组我不相信在这里节省内存会提高性能。使用
=
并将比较分为较小的块,然后将块的结果存储在预先分配的数组/列表中-除非您想向
np.equal
添加处理字符串的功能。
>>> compare = np.full(a.shape, 'a')
>>> np.equal(a, compare)
NotImplemented