Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
598 views
in Technique[技术] by (71.8m points)

numpy - how to replace nans by numbers in a multidimensional array in Numba?

In plain python, replacing nans by numbers in-place in a numpy array is trivial. However, the following fails in when doing the same in Numba

@jit(nopython=True)
def dostuff():
    x = np.array([[1,np.nan,3]]);
    np.nan_to_num(x,copy=False);
dostuff()

How can I replace nans by zeros in a numpy array, in-place, in a Numba-compilable function? For one-dimensional one can do x[np.isnan(x)]=0 but for higher dimensions this fails as well.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

For one-dimensional one can do x[np.isnan(x)]=0 but for higher dimensions this fails as well.

There is the clue :)

import numpy as np
from numba import jit

@jit(nopython=True)
def dostuff(x):
    shape = x.shape
    x = x.ravel()
    x[np.isnan(x)] = 0
    x = x.reshape(shape)
    return x

a = np.array([[1,np.nan,3], [np.nan, 2, 6]])
dostuff(a)
print(a)

Output:

[[1. 0. 3.]
 [0. 2. 6.]]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...