Проблема в numpy операции для списка 2 * 2 - PullRequest
1 голос
/ 10 ноября 2019

введите описание изображения здесь

Я написал код для 2D списка.

row_num = int(input())
col_ = int(input())
arr2=[]
for i in range(row_num):
    arr2.append([])
    a=input()
    a=a.split(" ")
    for j in range(col_):
        arr2[i].append(a[j])
for j in range(2):
  arr2[j][-2]=float(arr2[j][-2])-float(arr2[j][-1])
print(arr2)

сначала я не конвертировал список в массив np, поэтому мой вывод был

2
2
2 9
2 9
[[-7.0, '9'], [-7.0, '9']]

, но когда я конвертировал список в массив np и выполнял ту же операцию

row_num = int(input())
col_ = int(input())
arr2=[]
for i in range(row_num):
    arr2.append([])
    a=input()
    a=a.split(" ")
    for j in range(col_):
        arr2[i].append(a[j])
arr2=np.array(arr2)   #here I am converting list into np array
for j in range(2):
  arr2[j][-2]=float(arr2[j][-2])-float(arr2[j][-1])
print(arr2)

У меня другой вывод

2
2
2 9
2 9
[['-' '9']
 ['-' '9']]

Не знаю, почему я получаю разные ответы?

1 Ответ

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

В документации для numpy.array() указано значение параметра dtype:

Требуемый тип данных для массива. Если не указан, то тип будет определен как минимальный тип, необходимый для хранения объектов в последовательности. ...

Это именно то, что здесь произошло. Вы ожидали, что массив сможет содержать значения str и float, как это делают обычные массивы Python;для этого dtype должно быть object. Поскольку вы не указали тип, вместо этого он выбрал отдельные символы:

>>> np.array(['2', '9'])
array(['2', '9'], 
      dtype='<U1')

И затем, когда вы попытались поместить -7.0 в один слот массива отдельных символов, он, должно быть, превратил его встрока '-7.0' и используется только первый символ этого.

Так что укажите dtype, который вы хотите для вашего массива при его создании. Если вы хотите получить некоторые из преимуществ производительности Numpy, возможно, вы захотите использовать dtype с плавающей запятой и преобразовать ваши строки в числа с плавающей запятой до того, как поместите их в массив Numpy. Или вы можете сделать преобразование с помощью astype():

>>> np.array(['2', '9']).astype(float)
array([ 1.,  2.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...