Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить индекс значения в массиве, Вывести индекс в массиве по его значению 
:(
    Опции темы
Oltro
Дата 29.5.2016, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.5.2016

Репутация: нет
Всего: нет



Помогите пожалуйста.Недавно начал изучать python. Все перерыл в инете, не могу найти ответ.
Импортируется библиотека numpy. В данном случае надо найти есть ли число в массиве или в срезе. Если есть, то вывести его индекс на печать. Нужно получить индекс числа из массива/среза y.
Просто индекс, как получить индекс?! Простая штука, но не могу найти ответ, помогите, плз. Во многих задачах это требуется и затык у меня конкретный с этим.
Код

import numpy as np
y = np.array([[1,1,2,3],[2,8,9,5],[3,7,8,9],[3,8,9,6]])
x = [7,8]
if d[0] in y[:,1]:
    print ()

PM MAIL   Вверх
Romikgy
Дата 29.5.2016, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

for i in range(len(y)):
  if y[i]==5:
    print i



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Oltro
Дата 30.5.2016, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.5.2016

Репутация: нет
Всего: нет



Спасибо за ответ. Если вместо 5 поставить искомое число, например x[0], то получим нужный индекс. 
Но теперь проблема в том что нужно делать цикл, а это очень сильно увеличит время расчетов, потому что таких циклов придется написать очень много в программе. Без циклов никак не возможно обойтись в данном случае, подскажите пожалуйста кто знает? Может есть другое решение?
PM MAIL   Вверх
Romikgy
Дата 30.5.2016, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

["foo", "bar", "baz"].index("bar")



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Oltro
Дата 30.5.2016, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.5.2016

Репутация: нет
Всего: нет



Спасибо. По всякому пробовал, но не выходит никак правильно написать синтаксис. Напишите пожалуйста пример и станет сразу понятно. Будьте снисходительны к начинающему. smile  
Если число X есть в массиве Y, то вывести его индекс в массиве Y. Если оно встречается 2 или N раз, то вывести все индексы.
Код

x = [1,2]
y = np.array([1,1,2,3])
if x[0] in y:
    print('index числа x в массиве y =', index)

PM MAIL   Вверх
Romikgy
Дата 30.5.2016, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

x = [1,2]
y = np.array([1,1,2,3])
if x[0] in y:
    print('index числа x в массиве y =', y.index(x[0]))



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Oltro
Дата 30.5.2016, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.5.2016

Репутация: нет
Всего: нет



Уважаемый Romikgy! Хочу вам сказать большое спасибо за помощь, я написал все с циклами, и программа работает очень быстро.  smile Намного быстрее чем со списками.
По последнему варианту почему то выдает выдает такую ошибку:
AttributeError: 'numpy.ndarray' object has no attribute 'index'    

PM MAIL   Вверх
Romikgy
Дата 30.5.2016, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

import numpy as np
y = np.array([[1,1,2,3],[2,8,9,5],[3,7,8,9],[3,8,9,6],[1,8,9,7]])
x = [7,8]
if x[0] in y:
    print( np.where(y==x[0]))



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Oltro
Дата 31.5.2016, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.5.2016

Репутация: нет
Всего: нет



Все здорово!  smile  Спасибо! Для одномерного массива или среза вот так тогда будет по аналогии:
Код

y = np.array([1,8,9,7])
x = [7,8]
if x[0] in y:
    print(np.where(y==x[0]))

И на печать выводится следующее:
(array([3], dtype=int32),)
Теперь еще вопрос остался, как мне это значение, в данном случае число 3 присвоить какой-нибудь переменной, чтобы я мог это значение использовать в программе дальше, так как именно это значение нужно в дальнейших вычислениях?
Так же как и из двумерного массива присвоить какой-нибудь переменной значение индекса?
То есть вопрос такой: как полученное значение (индекс) внутри функции print присвоить переменной?
С уважением, Олег
PM MAIL   Вверх
Romikgy
Дата 31.5.2016, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

y = np.array([1,8,9,7])
x = [7,8]
if x[0] in y:
  for j in  np.where(y==i)[0]:
    print 'Fined at index : ',j



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
baldman88
Дата 31.5.2016, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Зачем все так усложнять? numpy.array имеет метод tolist().
Для одномерного массива:
Код

y = np.array([1, 8, 9, 7])
x = [7, 8]
index = -1
if x[0] in y:
    index = y.tolist().index(x[0])
if index != -1:
    ... do something ...

Но, следует учитывать тот факт, что возвращается индекс первого вхождения. То есть, если в массиве несколько элементов с искомым значением, то вернется индекс первого найденого элемента.
PM MAIL   Вверх
craneua
Дата 12.6.2016, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.6.2016

Репутация: нет
Всего: нет



Код

y = [1, 8, 9, 7]
x = [7, 8]
print([y.index(i) for i in x if i in y])

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.