Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

clearing elements of numpy array

Is there a simple way to clear all elements of a numpy array? I tried:

del arrayname

This removes the array completely. I am using this array inside a for loop that iterates thousands of times, so I prefer to keep the array but populate it with new elements every time.

I tried numpy.delete, but for my requirement I don't see the use of subarray specification.

*Edited*:

The array size is not going to be the same.

I allocate the space, inside the loop at the beginning, as follows. Please correct me if this is a wrong way to go about:

arrname = arange(x*6).reshape(x,6)

I read a dataset and construct this array for each tuple in the dataset. All I know is the number of columns is going to be the same but not the number of rows. For example, the first time I might need an array of size (3,6), for the next tuple as (1,6) and the next time as (4,6) and so on. The way I populate the array is as follows:

arrname[:,0] = lstname1
arrname[:,1] = lstname2
...

In other words, the columns are filled from lists constructed from the tuples. So, before the next loop begins I want to clear its elements and make it ready for the consecutive loop since I don't want remnants from the previous loop mixing the current contents.

like image 699
Jey Avatar asked Dec 27 '22 21:12

Jey


1 Answers

I'm not sure what you mean by clear, the array will always have some values stored in it, but you can set those values to something, for example:

>>> A = numpy.array([[1, 2], [3, 4], [5, 6]], dtype=numpy.float)
>>> A
array([[ 1.,  2.],
       [ 3.,  4.],
       [ 5.,  6.]])

>>> A.fill(0)
>>> A
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

>>> A[:] = 1.
>>> A
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

Update

First, your question is very unclear. The more effort you put into writing a good question the better answers you'll get. A good question should make it clear to us what you're trying to do and why. Also example data is very helpful, just a small amount, so we can see exactly what you're trying to do.

That being said. It seems like maybe you should just create a new array for each iteration. Creating arrays is pretty fast and it's not clear why you would want to reuse an array when the size and contents need to change. If you're trying to reuse it for performance reasons, you're probably not going to see any measurable difference, resizing arrays is not noticeably faster than creating a new array. You can create a new array by calling numpy.zeros((X, 6))

Also in your question you say:

the columns are filled from lists constructed from the tuples

If your data is already housed as a list of tuples you use numpy.array to convert it to an array. You don't need to go the the trouble of creating an array and filling it. For example if I wanted to get a (2, 3) array from a list of tuples I would do:

data = [(0, 0, 1), (0, 0, 2)]
A = numpy.array(data)

# or if the data is stored like this
data = [(0, 0), (0, 0), (1, 2)]
A = numpy.array(data).T

Hope that helps.

like image 106
Bi Rico Avatar answered Jan 17 '23 09:01

Bi Rico