[Numpy-discussion] searching a list of arrays
Robert Kern
rkern at ucsd.edu
Tue Mar 29 03:46:19 EST 2005
Darren Dale wrote:
> Hi,
>
> I have a list of numeric-23.8 arrays:
>
> a = [array([0,1]),
> array([0,1]),
> array([1,0]),
> array([1,0])]
>
> b = [array([0,1,0]),
> array([0,1,0]),
> array([1,0,0]),
> array([1,0,0])]
>
> and I want to make a new list out of b:
>
> c = [array([0,1,2]),
> array([1,0,2])]
>
> where the last index in each array is the result of
>
> b.count([0,1,0]) # or [1,0,0]
>
>
> The problem is that the result of b.count(array([1,0,0])) is 4, not 2, and
> b.remove(array([1,0,0])) indescriminantly removes arrays from the list.
> a.count and a.remove work the way I expected.
This is a result of rich comparisons. (array1 == array2) yields an
array, not a boolean.
In [1]:a = [array([0,1]),
...: array([0,1]),
...: array([1,0]),
...: array([1,0])]
In [2]:b = [array([0,1,0]),
...: array([0,1,0]),
...: array([1,0,0]),
...: array([1,0,0])]
In [3]:
In [3]:b.count(array([0,1,0]))
Out[3]:4
In [4]:[x == array([0,1,0]) for x in b]
Out[4]:
[array([1, 1, 1],'b'),
array([1, 1, 1],'b'),
array([0, 0, 1],'b'),
array([0, 0, 1],'b')]
To replace b.count(), you can do
In [12]:sum(alltrue(equal(b, array([0,1,0])), axis=-1))
Out[12]:2
To replace b.remove(), you can do
In [14]:[x for x in b if not alltrue(x == array([0,1,0]))]
Out[14]:[array([1, 0, 0]), array([1, 0, 0])]
--
Robert Kern
rkern at ucsd.edu
"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter
More information about the NumPy-Discussion
mailing list