Python 仅比较numpy中的对象引用
我有一个Python对象的numpy数组。我想将数组与python对象进行比较,我不想与Python 仅比较numpy中的对象引用,python,numpy,equality,Python,Numpy,Equality,我有一个Python对象的numpy数组。我想将数组与python对象进行比较,我不想与=运算符进行比较,但仅进行一次引用比较就足以满足我的要求 import numpy as np a = np.array(["abc", "def"], dtype="object") a == "abc" 我确信我的数组的引用副本就足够了。假设数组中的所有字符串都已被插入 这主要是为了在比较大量值时提高性能。Python对象比较非常慢 a是“abc”不会做我想做的事,因为 In [1]: import n
=
运算符进行比较,但仅进行一次引用比较就足以满足我的要求
import numpy as np
a = np.array(["abc", "def"], dtype="object")
a == "abc"
我确信我的数组的引用副本就足够了。假设数组中的所有字符串都已被插入
这主要是为了在比较大量值时提高性能。Python对象比较非常慢
a是“abc”不会做我想做的事,因为
In [1]: import numpy as np
In [2]: a = np.array(["abc", "def"], dtype="object")
In [3]: a == "abc"
Out[3]: array([ True, False], dtype=bool)
In [4]: a is "abc"
Out[4]: False
我希望a==“abc”
的结果,但我不希望Python的\uuuueq\uuuuuu
方法用于相同的操作,只希望是
操作符
参考比较就足以满足我的要求
要比较对象标识,请使用is
而不是=
:
if a is b:
...
python -mtimeit -s 'import numpy as np' -s 'import random, string' -s 'a = np.array(["".join(random.choice(string.ascii_lowercase) for x in range(4)) for e in range(100000)])' -s 'vector_is = np.vectorize(lambda x,y: x is y, otypes=[bool])' 'a == "abcd"'
1000 loops, best of 3: 1.42 msec per loop
从:
运算符为
且不为
测试对象标识:x为y
当且仅当x
和y
为同一对象时为真x不是y
产生反真值
编辑:要将is
应用于数组的每个元素,可以使用:
In [6]: map(lambda x:x is "abc", a)
Out[6]: [True, False]
或者简单地说:
In [9]: [x is "abc" for x in a]
Out[9]: [True, False]
参考比较就足以满足我的要求
要比较对象标识,请使用is
而不是=
:
if a is b:
...
python -mtimeit -s 'import numpy as np' -s 'import random, string' -s 'a = np.array(["".join(random.choice(string.ascii_lowercase) for x in range(4)) for e in range(100000)])' -s 'vector_is = np.vectorize(lambda x,y: x is y, otypes=[bool])' 'a == "abcd"'
1000 loops, best of 3: 1.42 msec per loop
从:
运算符为
且不为
测试对象标识:x为y
当且仅当x
和y
为同一对象时为真x不是y
产生反真值
编辑:要将is
应用于数组的每个元素,可以使用:
In [6]: map(lambda x:x is "abc", a)
Out[6]: [True, False]
或者简单地说:
In [9]: [x is "abc" for x in a]
Out[9]: [True, False]
关于:
那你有
>>> a = np.array(["abc", "def"], dtype="object")
>>> vector_is(a, "abc")
array([ True, False], dtype=bool)
不幸的是,我不知道您是否可以使用操作符。这里是
,因为我
ValueError: failed to determine the number of arguments for <built-in function is_>
最后一种方法,np.fromiter((x是a中x的“abcd”),bool,len(a))
是从列表理解方法中获取numpy数组的一种方法
不幸的是,所有这些都比仅仅使用==
慢得多:
if a is b:
...
python -mtimeit -s 'import numpy as np' -s 'import random, string' -s 'a = np.array(["".join(random.choice(string.ascii_lowercase) for x in range(4)) for e in range(100000)])' -s 'vector_is = np.vectorize(lambda x,y: x is y, otypes=[bool])' 'a == "abcd"'
1000 loops, best of 3: 1.42 msec per loop
关于:
那你有
>>> a = np.array(["abc", "def"], dtype="object")
>>> vector_is(a, "abc")
array([ True, False], dtype=bool)
不幸的是,我不知道您是否可以使用操作符。这里是
,因为我
ValueError: failed to determine the number of arguments for <built-in function is_>
最后一种方法,np.fromiter((x是a中x的“abcd”),bool,len(a))
是从列表理解方法中获取numpy数组的一种方法
不幸的是,所有这些都比仅仅使用==
慢得多:
if a is b:
...
python -mtimeit -s 'import numpy as np' -s 'import random, string' -s 'a = np.array(["".join(random.choice(string.ascii_lowercase) for x in range(4)) for e in range(100000)])' -s 'vector_is = np.vectorize(lambda x,y: x is y, otypes=[bool])' 'a == "abcd"'
1000 loops, best of 3: 1.42 msec per loop
我不确定,你把我的问题问对了。例如在[1]:将numpy作为np导入[2]:a=np.array([“abc”,“def”],dtype=“object”)在[3]:a==“abc”Out[3]:array([True,False],dtype=bool)在[4]:a是“abc”Out[4]:False请查看结果中的差异a==“abc”和a是“abc”。我想要相同的结果a==“abc”,但我不想为相同的而只是“is”调用python对象eq方法。map将比a==“abc”花费大量时间,因为结果数组将是python数组。我不确定,我的问题你答对了。例如在[1]:将numpy作为np导入[2]:a=np.array([“abc”,“def”],dtype=“object”)在[3]:a==“abc”Out[3]:array([True,False],dtype=bool)在[4]:a是“abc”Out[4]:False请查看结果中的差异a==“abc”和a是“abc”。我想要相同的结果a==“abc”,但我不想为相同的而只是“is”调用python对象eq方法。map将比a==“abc”花费大量时间,因为结果数组将是python数组。不幸的是,这比a==“abc”慢,因为它无论如何都会涉及python方法调用(速度很慢).Right——如果
operator.is
工作,它可能会更快,但是numpy.vectorize
出于某些愚蠢的原因不喜欢这样。不幸的是,这比a==“abc”慢,因为它无论如何都会涉及python方法调用(速度很慢)。对——如果operator.is
工作,它可能会更快,但是numpy.vectorize
出于某种愚蠢的原因不喜欢它。在仔细研究之后,我认为你不会得到任何超过纯Python中列表理解的东西(或者如果你确实想要一个numpy数组,那么我的答案中的fromiter
)。如果你想在C语言中实现它,你可以看到==
是如何实现的……在仔细研究之后,我认为你不会在纯Python中得到任何超过列表理解的东西(或者如果你确实想要一个numpy数组,那么我的答案中的fromiter
)。如果您想在C中实现它,您可以看到==
是如何实现的。。。。