Home > Software engineering >  TypeError: '>' not supported between instances of 'numpy.ndarray' and 'f
TypeError: '>' not supported between instances of 'numpy.ndarray' and 'f

Time:09-28

I am trying to calculate the pair correlation function from a given FDF file. It computes the three-dimensional pair correlation function for a set of spherical particles in the LatticeVectors. This simple function finds reference particles such that a sphere of radius rmax drawn around the particle will fit entirely within the cube, eliminating the need to compensate for edge effects. If no such particles exist, an error is returned.

Returns a tuple: (g, radii, interior_indices)

g(r): a numpy array containing the correlation function g(r)

radii: a numpy array containing the radii of the spherical shells used to compute g(r)

reference_indices: indices of reference particles

My code is:

def pair_correlation_function(label=None, path="i*", dr=0.1, plot_=True):
    fdfpath = glob.glob(f"{path}{os.sep}{label}.fdf")[0]
    x, y, z = coords(fdfpath)
    x = np.array(x)
    y = np.array(y)
    z = np.array(z)
    sx, sy, sz = lattice_vectors_mag(fdfpath)
    _, _, species_ = species(fdfpath)
    rmax = max(element_diameter(specie) for specie in species_)
    bools1 = x > rmax
    bools2 = x < sx - rmax
    bools3 = y > rmax
    bools4 = y < sy - rmax
    bools5 = z > rmax
    bools6 = z < sz - rmax
    (interior_indices,) = np.where(bools1 * bools2 * bools3 * bools4 * bools5 * bools6)
    num_interior_particles = len(interior_indices)
    if num_interior_particles < 1:
        raise RuntimeError("No particles found. Increase the LatticeVectors.")
    edges = np.arange(0.0, rmax   1.1 * dr, dr)
    num_increments = len(edges) - 1
    g = np.zeros([num_interior_particles, num_increments])
    radii = np.zeros(num_increments)
    numberdensity = len(x) / sx * sy * sz
    for p in range(num_interior_particles):
        index = interior_indices[p]
        d = np.sqrt((x[index] - x)**2   (y[index] - y)**2   (z[index] - z)**2)
        d[index] = 2 * rmax
        result, bins = np.histogram(d, bins=edges, density=False)
        g[p, :] = result / numberdensity
    g_average = np.zeros(num_increments)
    for i in range(num_increments):
        radii[i] = (edges[i]   edges[i   1]) / 2.0
        router = edges[i   1]
        rinner = edges[i]
        g_average[i] = np.mean(g[:, i]) / (4.0 / 3.0 * np.pi * (router**3 - rinner**3))
    return g_average, radii, interior_indices

I am getting TypeError: '>' not supported between instances of 'numpy.ndarray' and 'float' error for the line bools1 = x > rmax.

CodePudding user response:

You have to test the condition for every element of the list. Try smtg like:

a = [1,0,3,5,6,0]

b = [i>0 for i in a]

Output:

[True, False, True, True, True, False]

CodePudding user response:

Check the elements in numpy.ndarray,maybe they are 'str' or other types instead of 'int' or 'float'.

  • Related