I am trying to calculate information from an array that contains integers, however when I do a calculation the results are foat's. How do I change the ndarry to accept 0.xxx numbers as a input. Currently I am only getting 0's. Here is the code I have been trying to get working:
ham_fields = np.array([], dtype=float) # dtype specifies the type of the elements
ham_total = np.array([], dtype=float) # dtype specifies the type of the elements
ham_fields = data[data[:, 0] == 0] # All the first column of the dataset doing a check if they are true or false
ham_sum = np.delete((ham_fields.sum(0)),0) # Boolean indices are treated as a mask of elements to remove none Ham items
ham_total = np.sum(ham_sum)
ham_len = len(ham_sum)
for i in range(ham_len):
ham_sum[i] = (ham_sum[i] self.alpha) / (ham_total (ham_len * self.alpha))
CodePudding user response:
ham_fields = np.array([], dtype=float)
ham_fields = data[data[:, 0] == 0]
ham_sum = np.delete((ham_fields.sum(0)),0)
This line assigns a new array object to ham_fields
. The first assignment did nothing for you. In Python variables are not declared at the start.
If data
has a int
dtype, then so does ham_fields
. You could change that with a another assignment
ham_fields = ham_fields.astype(float)
ham_sum
has the same dtype
as ham_fields
, from which it's derived.
Assigning a float to an element of a int
dtype array will not change the dtype.
for i in range(ham_len):
ham_sum[i] = (ham_sum[i] self.alpha) / (ham_total (ham_len * self.alpha))
If self.alpha
, ham_total
are scalar then you should be able to do
ham_sum = (ham_sum self.alpha)/(ham_toal (ham_len * self.alpha))
This makes a new array, which will be float, and assigns it to ham_sum
variable. It's a new assignment (not modification) so the float dtype is preserved. Or to make things clear, assign it to a new variable name.
CodePudding user response:
You can use astype(int) to convert it to an int array after the calculation
import numpy as np
array1 = np.array([1, 2, 3])
print(array1.dtype)
#output: int64
array2 = np.array([2, 3, 4])
print(array2.dtype)
#output: int64
array3 = array1 / array2
print(array3.dtype)
#output: float64
array4 = array3.astype(int)
print(array3.dtype)
#output: int64
You could also do that inside of your calculation by working with brackets:
array3 = (array1 / array2).astype(int)