'numpy.ndarray' object has no attribute 'remove'

Question:

I have an array of arrays and I’m trying to find the lowest non-zero value among them all.

minima = []
for array in K: #where K is my array of arrays (all floats)
    if 0.0 in array:
        array.remove(0.0)
    minima.append(min(array))

print min(minima)

This yields

AttributeError: 'numpy.ndarray' object has no attribute 'remove'

I thought array.remove() was the way to remove an element. What am I doing wrong?

Asked By: berkelem

||

Answers:

Looks like you want .delete:

minima = []
for array in K: #where K is my array of arrays (all floats)
    minimum = min(array)
    minima = np.delete(array, minimum)
    minima.append(min(array))

print(minima)

And it seems to work for me, hence:

In [5]: a = np.array([1,3,5])                                                                                                                                   

In [6]: a = np.delete(a, 0)                                                                                                                                         

In [7]: a
Out[7]: array([3, 5])
Answered By: hd1

I think I’ve figured it out.
The .remove() method is a list method, not an ndarray method.
So by using array.tolist() I can then apply the .remove() method and get the required result.

Answered By: berkelem

Just cast it to a list:

my_list = list(array)

You can then get all the list methods from there.

Answered By: Sinister Beard

This does not directly address your question, as worded, but instead condenses some of the points made in the other answers/comments.


The following demonstrates how to, effectively, remove the value 0.0 from a NumPy array.

>>> import numpy as np
>>> arr = np.array([0.1, 0.2, 0.0, 1.0, 0.0]) # NOTE: Works if more than one value == 0.0
>>> arr
array([0.1, 0.2, 0. , 1. , 0. ])
>>> indices = np.where(arr==0.0)
>>> arr = np.delete(arr, indices)
>>> arr
array([0.1, 0.2, 1. ])

Another useful method is numpy.unique(), which, “Returns the sorted unique elements of an array.”:

>>> import numpy as np
>>> arr = np.array([0.1, 0.2, 0.0, 1.0, 0.0])
>>> arr = np.unique(arr)
>>> arr
array([0. , 0.1, 0.2, 1. ])
Answered By: JDQ

use the following script, it works for me,
array1=tolist(array)

Answered By: Beki Mada