Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Получить индекс значения в массиве


Автор: Oltro 29.5.2016, 13:41
Помогите пожалуйста.Недавно начал изучать 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 ()

Автор: Romikgy 29.5.2016, 22:58
Код

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

Автор: Oltro 30.5.2016, 07:38
Спасибо за ответ. Если вместо 5 поставить искомое число, например x[0], то получим нужный индекс. 
Но теперь проблема в том что нужно делать цикл, а это очень сильно увеличит время расчетов, потому что таких циклов придется написать очень много в программе. Без циклов никак не возможно обойтись в данном случае, подскажите пожалуйста кто знает? Может есть другое решение?

Автор: Romikgy 30.5.2016, 09:20
Код

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

Автор: Oltro 30.5.2016, 10:41
Спасибо. По всякому пробовал, но не выходит никак правильно написать синтаксис. Напишите пожалуйста пример и станет сразу понятно. Будьте снисходительны к начинающему. 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)

Автор: Romikgy 30.5.2016, 14:00
Код

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

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

Автор: Romikgy 30.5.2016, 21:22
Код

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]))

Автор: Oltro 31.5.2016, 12:28
Все здорово!  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 присвоить переменной?
С уважением, Олег

Автор: Romikgy 31.5.2016, 21:48
Код

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

Автор: baldman88 31.5.2016, 22:33
Зачем все так усложнять? 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 ...

Но, следует учитывать тот факт, что возвращается индекс первого вхождения. То есть, если в массиве несколько элементов с искомым значением, то вернется индекс первого найденого элемента.

Автор: craneua 12.6.2016, 18:24
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)