如何使用混合数据类型数组保留数据类型?

时间:2020-08-17 03:59:53

标签: python python-3.x numpy numpy-ndarray

我有一个数组,其初始化为empty数组。在数组内部,将有一些值为integer,而另一些为floats。在for循环之后,所有输出都是floats(科学计数法),而不管先前的数据是否为integer。我需要整数来保持整数。

for周期如下所示:

arr = np.empty(arr_size)

co_point = np.uint8(arr_size[1]/2)

for k in range(arr_size[0]):
   p1_idx = int(k%np.array(first_list).shape[0])
   p2_idx = int((k+1)%np.array(first_list).shape[0])

   arr[k, 0:co_point] = first_list[p1_idx][0:co_point]

   arr[k, co_point:] = first_list[p2_idx][co_point:]

first_list是一个包含数字的其他列表的列表。

例如,其输出为:

>>arr
array([[1.0e+02, 1.0e-05, 1.0e-02, 3.0e-01, 3.2e+01]])

所需的输出是这样的:

>>arr
array([[100, 1.0e-05, 0.001, 0.3, 32]])

我该如何实现?

1 个答案:

答案 0 :(得分:0)

我做了一个解决问题的办法,但我确定会有更好或更理想的答案。我将在这里与有类似问题的任何人分享。

原始代码是这样的:

arr = np.empty(arr_size)

co_point = np.uint8(arr_size[1]/2)

for k in range(arr_size[0]):
   p1_idx = int(k%np.array(first_list).shape[0])
   p2_idx = int((k+1)%np.array(first_list).shape[0])

   arr[k, 0:co_point] = first_list[p1_idx][0:co_point]

   arr[k, co_point:] = first_list[p2_idx][co_point:]

我添加了一个与arr array相同维度的附加数组,该数组仅包含first_list list的数据类型。

dtypes = np.empty(arr_size,dtype=type)
for x in range(arr_size[0]):
  for y in range(arr_size[1]):
    dtypes[x,y]=type(first_list[x][y])

然后,当循环结束时,我需要将arr的值重铸为first_list的原始类型,但是由于arr强制使用了数据类型,因此我创建了一个带有辅助列表的新列表附加所有值。

r_arr = []
for x in range(arr_size[0]):
   aux = []
   for y in range(arr_size[1]):
      aux.append(dtypes[x,y](arr[x,y]))
   r_arr.append(aux)

诀窍是,拥有一个存储dtype=type数据类型的数组,可以使您实际执行dtypes[x,y](arr[x,y])的方式与执行type(1.13)相同。

希望它清晰可见,您会发现它有用!