The effective mass of a particle is not a scalar, but a rank-2 tensor, defined by,
$$
\left(\frac{1}{m}\right)_{ij} = \frac{1}{\hbar^2}\frac{d^2E}{dk_idk_j}, \tag{1}
$$
where $i$ and $j$ label reciprocal-space directions, $E$ is the band energy and $k$ is a reciprocal-space vector.
The eigenvalues of $\mathrm{m}$ are the effective masses, and the eigenvectors are the corresponding directions; these directions give the basis in which the effective mass tensor is diagonal, and so form a natural basis in which to specify the effective masses.
This means that, in general, you should calculate all nine elements of the tensor (although it's symmetric, so only six are independent) and diagonalise it to find the eigenvectors and eigenvalues. This is more work than a single direction, but it means that you don't have to worry about "getting the direction wrong" because the natural directions will be calculated for you.
Isotropic systems
If your system is isotropic, then all of the effective masses are the same. In this case, the tensor will be diagonal in any coordinate system and you can just talk about a single scalar as "the effective mass". An obvious example of this is free space, where we write equations such as,
$$
\vec{F} = m\vec{a}, \tag{2}
$$
(where $\vec{F}$ is a force, and $\vec{a}$ an acceleration) and we often forget that $m$ is actually of rank 2 (not 0).
Calculating the effective mass tensor
In principle, it's straightforward to calculate the effective mass tensor by finite difference of either the band energy directly, or its reciprocal-space gradient, $\nabla_kE$. However, in practice the units of $k$-points can be rather confusing, both in terms of formulating the mathematics correctly, and implementing it in your ab initio modelling program of choice.
When k-points are specified in fractional coordinates, they are fractions of the reciprocal-lattice vectors; e.g. a k-point specified as:
$$
\vec{k} = (0.2 , 0.4, 0.5), \tag{3}
$$
actually means the vector
$$
\vec{k} = 0.2\vec{A}^\ast + 0.4\vec{B}^\ast + 0.5\vec{C}^\ast, \tag{4}
$$
where $\vec{A}^\ast$, $\vec{B}^\ast$ and $\vec{C}^\ast$ are the reciprocal-lattice vectors.
When we calculate the effective mass tensor by finite-difference, it's common to change the fractional coordinates of $\vec{k}$, but the derivative is defined in terms of the change in actual reciprocal-space coordinates, so you need to convert the $\delta\vec{k}$ into a reciprocal-distance by multiplying by the reciprocal-lattice vectors.
Why mass is a rank-2 tensor
It's easy to state that mass is a rank-2 tensor, but it may not be clear why this is so. Newton's 2nd Law tells us that force, $\vec{F}$, and acceleration $\vec{a}$ are linearly related, and that mass is the constant of proportionality.
Scalars and linear relationships
We are trained from an early age to think about mass as a scalar (rank-0 tensor) quantity, such that
$$
\vec{F} = m\vec{a}
\Rightarrow F_i = ma_i, \tag{5}
$$
i.e. the $i$th component of the force vector is $m$ times the $i$th component of the acceleration.
Thus, when mass is a scalar, the force and acceleration are always parallel. We are used to this physically, as we expect an object to accelerate in the direction in which we pull it.
General linear relationships
An expression where $F_i$ depends only on $a_i$ is not the most general linear relationship. There is no fundamental reason why, for example, the 1st component of the force should not be linearly related to the 3rd component of the acceleration,
$$
F_1 = m_{13} a_3,\tag{6}
$$
(for some constant $m_{13}$) or even a combination of all the components of $\vec{a}$,
$$
F_1 = m_{11} a_1 + m_{12} a_2 + m_{13} a_3 = \sum_j m_{1j}a_j,\tag{7}
$$
with the additional constants $m_{11}$ and $m_{12}$ as well. The same holds for $F_2$ and $F_3$, and so we can write a more general expression,
$$
F_i = \sum_{j} m_{ij}a_j.\tag{8}
$$
which is a general linear relationship between all of the components of the force and all of the components of the acceleration. If we look at this expression mathematically, we see that it is exactly the same as the matrix-vector product in component form,
$$
F_i = \left(\mathrm{M}\vec{a}\right)_i,\tag{9}
$$
where $\matrix{M}$ is a rank-2 tensor (expressed as a matrix in any given coordinate system).
Physical meaning
Since mass is a rank-2 tensor, then there can be cases where we exert a force on an object and it accelerates in a different direction (not parallel to the force). Empirically, we might observe such an effect if we pull a wheeled vehicle at an angle not parallel to the direction of the wheels; the vehicle will preferentially accelerate in the direction the wheels are pointing in, rather than parallel to the force.
The effective mass of a particle arises due to interactions between the particle and the material, and if the material is not isotropic then there is no reason to expect that the mass will be isotropic either. In the everyday case of electrons flowing in a wire, the electrons will flow down the wire even if the electric field is not parallel to the wire.
This is why it's risky to try to determine the direction of propagation first, and then compute the effective mass (energy curvature) in this direction. You will always get a curvature, and so you'll have "an effective mass" for that direction, but unless your chosen direction is an eigenvector of the effective mass tensor, your results doesn't mean what you think it means, because to make the particle travel along that direction would require a force in a different direction, that you haven't calculated!