Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2016 19:17:39

denant
Зарегистрирован: 2016-07-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

Добрый день.

Осваиваю Python для решения небольших задач и тестирования алгоритмов обработки пространственных данных. Столкнулся с непонятным поведением модуля NumPy. Возможно, кто-то знает, в чем проблема?
Пытаюсь создать и заполнить массив с именованными столбцами. При попытке присвоить элементу массива значение, получаю ошибку:

>>> LAS = np.empty((5, 2))
>>> LAS.dtype = [('x','float64'),('y','float64')]
>>> LAS[0,0] = 5
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    LAS[0,0] = 5
TypeError: a bytes-like object is required, not 'int'
>>>

Но в таком варианте все работает:

>>> LAS = np.empty((5, 2))
>>> LAS.dtype = 'float64'
>>> LAS[0,0] = 5
>>> print (LAS[0,0])
5.0

Отредактировано denant (Июль 8, 2016 10:57:04)

Офлайн

#2 Июль 7, 2016 22:56:53

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

denant
код на форумах надо оборачивать в специальные теги code в квадратных скобках (смотрите иконку в окошке набора текста сообщения). Иначе ваш не оформленный код “съедается” и его уже нельзя разобрать. Переоформите сообщение.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июль 8, 2016 10:59:02

denant
Зарегистрирован: 2016-07-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

Сорри, не знал. Переоформил исходное сообщение. Надеюсь, теперь правильно.

Офлайн

#4 Июль 8, 2016 11:35:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

Код ниже не выдаст ошибок, но я не знаю делает ли он то что вам нужно

LAS = np.empty((5, 2), dtype=[('x', np.float64), ('y', np.float64)])
LAS[0, 0] = np.float64(5)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июль 8, 2016 20:27:09

denant
Зарегистрирован: 2016-07-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

Да, так ошибок нет. Но результат совсем другой.

>>> LAS = np.empty((5, 2), dtype=[('x', np.float64), ('y', np.float64)])
>>> LAS[0, 0] = np.float64(5)
>>> print(LAS[0, 0])
(5.0, 0.0)
>>>
Как я понимаю, вместо одного значения, создался кортеж? Собственно, нужно создать 2-мерный массив известного размера с именованными столбцами и заполнить его значениями (числами). Я прохожу циклом по строкам и внутри цикла вычисляю ‘x’ и ‘y’ для каждой строки, что-то вроде этого:

X Y
1.2 3.5
2.0 7.1
1.1 3.3
4.8 5.6
9.4 6.2

Отредактировано denant (Июль 8, 2016 20:29:38)

Офлайн

#6 Июль 11, 2016 10:39:21

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Проблема с заполнением массива NumPy

Если вам нужно работать с именованными столбцами, может вам посмотреть на pandas.DataFrame.

from pandas import DataFrame
dc = {'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']}
print DataFrame(dc)
       A       B      C
0  14.00  103.02    big
1  90.20  107.26  small
2  90.95  110.35    big
3  96.27  114.23  small
4  91.21  114.68  small

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version