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

uxh89sit  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(210)

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

  1. import numpy as np
  2. my_list = [[1, 2, 3, 4], [5, 6, 7]]
  3. back_crop = 2
  4. list1 = [np.array(row[:-back_crop], dtype=np.float64) for row in my_list]
  5. list2 = [np.array(row[-back_crop:], dtype=np.float64) for row in my_list]
  6. array1 = np.array(list1, dtype=object)
  7. array2 = np.array(list2, dtype=object)
  8. print(array1, '\n', array2)
  9. print(array1[0].dtype, array2[0].dtype)

字符串
这将打印:

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


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

bd1hkmkf

bd1hkmkf1#

您的列表和数组:

  1. In [57]: my_list = [[1, 2, 3, 4], [5, 6, 7]]
  2. ...: back_crop = 2
  3. ...:
  4. ...: list1 = [np.array(row[:-back_crop], dtype=np.float64) for row in my_list]
  5. ...: list2 = [np.array(row[-back_crop:], dtype=np.float64) for row in my_list]
  6. ...:
  7. ...: array1 = np.array(list1, dtype=object)
  8. ...: array2 = np.array(list2, dtype=object)
  9. In [58]: array1
  10. Out[58]: array([array([1., 2.]), array([5.])], dtype=object)
  11. In [59]: array2
  12. Out[59]:
  13. array([[3.0, 4.0],
  14. [6.0, 7.0]], dtype=object)

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

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


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

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


并分配list1的元素:

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


或列表2的元素:

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

展开查看全部

相关问题