确保NumPy数组中数据类型的一致性

uxh89sit  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

我有一个Python脚本,我将2D列表my_list的每一行分成两部分。第一部分array1包含每行中除了最后两个元素之外的所有元素,第二部分array2my_list中的行可以具有不同的长度,因此会出现挑战(假设每一行都有2个以上的元素)。下面是一个示例代码:

import numpy as np

my_list = [[1, 2, 3, 4], [5, 6, 7]]
back_crop = 2

list1 = [np.array(row[:-back_crop], dtype=np.float64) for row in my_list]
list2 = [np.array(row[-back_crop:], dtype=np.float64) for row in my_list]

array1 = np.array(list1, dtype=object)
array2 = np.array(list2, dtype=object)

print(array1, '\n', array2)
print(array1[0].dtype, array2[0].dtype)

字符串
这将打印:

[array([1., 2.]) array([5.])] 
 [[3.0 4.0]
 [6.0 7.0]]
float64 object


如何修改此代码以确保array1array2都包含float64数据类型的数组,同时保持当前数组的维度(不使用零或NA值填充)?

bd1hkmkf

bd1hkmkf1#

您的列表和数组:

In [57]: my_list = [[1, 2, 3, 4], [5, 6, 7]]
    ...: back_crop = 2
    ...: 
    ...: list1 = [np.array(row[:-back_crop], dtype=np.float64) for row in my_list]
    ...: list2 = [np.array(row[-back_crop:], dtype=np.float64) for row in my_list]
    ...: 
    ...: array1 = np.array(list1, dtype=object)
    ...: array2 = np.array(list2, dtype=object)

In [58]: array1
Out[58]: array([array([1., 2.]), array([5.])], dtype=object)

In [59]: array2
Out[59]: 
array([[3.0, 4.0],
       [6.0, 7.0]], dtype=object)

字符串
array2可以在没有object的情况下生成,得到一个数字dtype,仍然是(2,2)形状:

In [60]: np.array(list2)
Out[60]: 
array([[3., 4.],
       [6., 7.]])


你可以创建一个形状为(2,)的“空白”数组:

In [61]: array3 = np.empty(2, object)    
In [62]: array3
Out[62]: array([None, None], dtype=object)


并分配list1的元素:

In [63]: array3[:]=list1; array3
Out[63]: array([array([1., 2.]), array([5.])], dtype=object)


或列表2的元素:

In [64]: array3[:]=list2; array3
Out[64]: array([array([3., 4.]), array([6., 7.])], dtype=object)

相关问题