Я понимаю, что для вашего Q вы хотите, чтобы arr3 имел собственный dtype, чтобы вы могли изменить его, не затрагивая dtype исходного.если это так, вы можете
arr.dtype
# --> dtype([('a', '<f8'), ('b', '<f8')])
dt3 = copy.deepcopy(arr.dtype)
dt3.names = ('g','h')
arr3 = np.array(arr, dtype=dt3)
arr.dtype
# --> dtype([('a', '<f8'), ('b', '<f8')])
Прикол, кажется, у меня должен быть другой тип dtype при создании arr3 (изменил dt3, а затем создал arr3).в противном случае, ndarray захватывает ранее существовавший dtype (кажется, что-то вроде прокси).
На самом деле я боролся с подобной проблемой ранее, не найдя ее.Я хотел изменить часть dtype тогда, но не знал, как, поэтому я снова закончил жестко полное определение для этого второго dtype (одно мое поле было вложенным массивом, и я знаю его форму только во время выполнения).Так что это был хороший вопрос для меня:)