Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2014 21:27:30

Smushems
Зарегистрирован: 2014-02-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

Добрый вечер,ребят. Подскажите пожалуйста: хочу,чтобы сравнивая,в цикле считываемое имя элемента,сравнивалось с названием. :

  if t[i] == b'CE' and t[j] == 'CE':
Увеличиваю при этом маасив A на 1,после пробега по файлу массив А пуст,думаю,что неправильно сравниваю названия элементов,подскажите пожалуйста корректный синтаксис.

Элементы в файле прописаны,как CE,O и так далее. Пробовал ещё так:
 elif t[i]=="b'O'" and t[j]=="b'CE'":

Офлайн

#2 Фев. 26, 2014 21:34:11

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

Если я правильно понял, то “СЕ” это значение в шестнадцатеричной записи?
Если да, то нужно

if t[i] == b'\xce' and t[j] == 'CE':
И если хотите нормального ответа, выкладывайте побольше кода! А то непонятно что такое t, i, j и т.д.



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 26, 2014 21:36:51)

Офлайн

#3 Фев. 27, 2014 12:10:20

Smushems
Зарегистрирован: 2014-02-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

t = np.loadtxt("ceo2_sphere_20.xyz", usecols=[0], unpack = True, skiprows = 2, dtype = "str")
x, y, z = np.loadtxt("ceo2_sphere_20.xyz", usecols=[1,2,3], unpack = True, skiprows = 2)
for i in range(1 , len(x)):
    for j in range (0, i):
        print(i)
        rbuf = find_r (x[i]-x[j], y[i] - y[j], z[i] - z[j])
        index = int (np.around(rbuf/dr))
        if t[i] == b'CE' and t[j] == 'CE':
            hist1[index] += 2*ff1*ff1/ff_av/ff_av
        elif t[i]=="b'O'" and t[j]=="b'CE'":
            hist2[index] += 2*ff1*ff2/ff_av/ff_av
        elif t[i]=="b'O'" and t[j]=="b'O'":
            hist3[index] += (2*ff2*ff2)/ff_av/ff_av

Вот так,вроде понятнее. CE-это название элемента в файле (Церий),то есть-это символы. Мне кажется,что я неправильно обращаюсь к элементу массива из символов.

Отредактировано Smushems (Фев. 27, 2014 12:10:43)

Офлайн

#4 Фев. 27, 2014 18:58:30

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

Это уже более понятно. Еще пример файла ceo2_sphere_20.xyz и я напишу Вам код и постараюсь объяснить!



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Фев. 27, 2014 20:59:19

Smushems
Зарегистрирован: 2014-02-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

Извините,что так по частям получается выкладывать свой вопрос.

То есть там первый столбец-это те саме символы,к которым мне нужно обратиться и сравнить.

Прикреплённый файлы:
attachment ceo2_sphere_20.xyz (11,0 KБ)

Офлайн

#6 Фев. 27, 2014 22:09:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

        print(i, j, t[i], t[j], type(t[i]), type(t[j]))
        if t[i] == b'CE' and t[j] == 'CE':

Smushems
Пробовал ещё так:
не надо пробовать, надо посмотреть, что там



Отредактировано py.user.next (Фев. 27, 2014 22:10:53)

Офлайн

#7 Фев. 28, 2014 11:28:55

Smushems
Зарегистрирован: 2014-02-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

Там CE,когда прошу вывести маси t,в нём элементы записаны,как “CE”.

Офлайн

#8 Фев. 28, 2014 11:59:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

вставь print, который в предыдущем сообщении, и вывод сюда скопируй



Офлайн

#9 Март 2, 2014 00:06:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Обращение к элементу массива-символу.

>>> A = 0
>>> B = 0
>>> for i in range(1 , len(x)):
...     for j in range (0, i):
...         if t[i] == 'CE' and t[j] == 'CE':
...             A += 1
...         elif t[i] == 'O' and t[j] == 'O':
...             B += 1
>>> A
3741
>>> B
21528
Так как я не зняю что такое find_r и dr, полностью скрипт я не смог проверить!



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version