Почему dtype изменился по-разному после преобразования двух списков одного типа в массив numpy? - PullRequest
0 голосов
/ 10 ноября 2018

Когда я преобразовываю два списка numy-массивов в numy-массивы numpy-массивов, происходит нечто путанное. Первый список X_s изменился на массив с цифрами (1980, 384, 448, 1), что хорошо для обучения, но второй список X_l изменился на массивы с фигурами (2013,). Я проверяю их dtype, и первый становится float64, а второй становится объектом массива numpy. Почему это случилось?

print(len(X_s)) # 1980
print(len(X_l)) # 2013
print(X_s[0].dtype)  # float64
print(X_l[0].dtype)  # float64
print(X_s[0].shape)  # (384, 448, 1)
print(X_l[0].shape)  # (384, 448, 1)

for i in range(len(X_l)): 
    X_l[i] = np.array(X_l[i], dtype = np.float64)
for i in range(len(X_s)):
    X_s[i] = np.array(X_s[i], dtype = np.float64)

X_s = np.array(X_s)
X_l = np.array(X_l)

print(type(X_s[0]))  # <class 'numpy.ndarray'>
print(type(X_l[0]))  # <class 'numpy.ndarray'>

print(X_s.dtype) #  flaot64
print(X_l.dtype) #  object
print(X_s.shape) # (1980, 384, 448, 1)
print(X_l.shape) # (2013,)

После добавления двух циклов for, чтобы убедиться, что элементы имеют одинаковый тип, ничего не изменилось.

1 Ответ

0 голосов
/ 10 ноября 2018

Очень похоже, что элементы исходного списка X_l не имеют одинакового типа.(Вы показываете нам только тип первого элемента, но не остальные.)

Когда NumPy пытается преобразовать этот список в массив, он замечает это и приводит все к object.

* 1006.* Демо:
In [10]: X_s = [np.array([1]), np.array([2])]

In [11]: X_l = [np.array([1]), 2]

In [12]: np.array(X_s)
Out[12]:
array([[1],
       [2]])

In [13]: np.array(X_l)
Out[13]: array([array([1]), 2], dtype=object)

(Этот пример составлен, но соответствует вашим наблюдениям.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...