I’m trying to interpolate with the following code
self.indeces = np.arange( tmp_idx[len(tmp_idx) -1] )
self.samples = np.interp(self.indeces, tmp_idx, tmp_s)
where tmp_idx and tmp_s are numpy arrays. I get the following error:
array cannot be safely cast to
required type
Do you know how to fix this?
UPDATE:
class myClass
def myfunction(self, in_array, in_indeces = None):
if(in_indeces is None):
self.indeces = np.arange(len(in_array))
else:
self.indeces = in_indeces
# clean data
tmp_s = np.array; tmp_idx = np.array;
for i in range(len(in_indeces)):
if( math.isnan(in_array[i]) == False and in_array[i] != float('Inf') ):
tmp_s = np.append(tmp_s, in_array[i])
tmp_idx = np.append(tmp_idx, in_indeces[i])
self.indeces = np.arange( tmp_idx[len(tmp_idx) -1] )
self.samples = np.interp(self.indeces, tmp_idx, tmp_s)
One of your possible issues is that when you have the following line:
You are setting
tmp_sandtmp_idxto the built-in function np.array. Then when you append, you have have object type arrays, whichnp.interphas no idea how to deal with. I think you probably thought that you were creating empty arrays of zero length, but that isn’t how numpy or python works.Try something like the following instead:
No guarantees that this will work perfectly, since I don’t know your inputs or desired outputs, but this should get you started. As a note, in numpy, you are generally discouraged from looping through array elements and operating on them one at a time, if there is a method that performs the desired operation on the entire array. Using built-in numpy methods are always much faster. Definitely look through the numpy docs to see what methods are available. You shouldn’t treat numpy arrays the same way you would treat a regular python list.