Как отобразить значения двух массивов и вернуть индекс сопоставленного значения

1

У меня есть 2 массива, один из которых является Large_arr, а другой (подмножество) sub_arr. Я хочу сопоставить значения как массива, так и совпадающие значения массива будут возвращать индексы большого массива. У меня есть код, но он вызывает ошибку

    Traceback (most recent call last):
  File "C:/Users/hp/AppData/Local/Programs/Python/Python36/stack.py", line 36, in <module>
    if(sub_arr[i]==Large_arr[j]):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Мой код

import numpy as np 

Large_arr=np.array([[0.12046862, 0.64457892],
 [0.47522597, 0.12350968],
 [0.1649585 , 0.50135502],
 [0.20104755 ,0.15218623],
 [0.03772419 ,0.42482297],
 [0.51633778 ,0.61209002],
 [0.24848648 ,0.99651906],
 [0.47374345, 0.09990318],
 [0.58390815 ,0.19781604],
 [0.9613725  ,0.45975827],
 [0.99008266 ,0.13487207],
 [0.14410988 ,0.36196475],
 [0.81349573 ,0.55896232],
 [0.72841399 ,0.02263056],
 [0.8692731  ,0.9754183 ],
 [0.87142787 ,0.66163271],
 [0.24342035 ,0.95821073],
 [0.94218857 ,0.7220602 ],
 [0.66716105 ,0.96875209]])

sub_arr=np.array([[0.12046862, 0.64457892],
                 [0.51633778 ,0.61209002],
                 [0.99008266 ,0.13487207],
                 [0.72841399 ,0.02263056],
                 [0.24342035 ,0.95821073],
                 [0.47374345, 0.09990318],
                 [0.9613725  ,0.45975827]])



s=[]
for i in range(0,len(Large_arr)):
    for j in range(0,len(sub_arr)):
        if(sub_arr[i]==Large_arr[j]):
            s.append(j)
            print("Value of s is\n",s)
        else:
            print("Value is none\n")

Можно ли упростить этот метод. Итак, мой результат имеет ценность

S=[0,5,10,13,7,10,1] (example, index of large array where sub_array value stored)
Теги:
arrays
numpy

3 ответа

0

Вы можете попробовать следующее:

result_indices = np.argwhere(np.in1d(Large_arr, sub_arr))

Это должно сначала применить булевую маску, а затем дать вам индексы соответствующих элементов.

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

0

Я думаю, проблема может быть

if(sub_arr[i]==Large_arr[j]):

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

0

Во-первых, ваши индексы я и j меняются местами в ваших циклах. Убедитесь, что они используются для индексации в соответствующие массивы.

Во-вторых, вы выполняете код, который сравнивает элементы subarrays element-wise, это вернет массив логических значений, который является массивом, а не булевым, поэтому вы должны добавить.all(), чтобы свести его к одному булевому. .all() будет истинным, если все элементы верны, иначе это будет false.

В-третьих, вы должны иметь возможность уменьшить его. Я привел код ниже, чтобы показать все три из этих пунктов.

Кроме того, ваша новая строка не делает то, что должно быть. Убедитесь, что вы проверили свой код перед его публикацией и включили такие сведения, как версия используемого python.

import numpy as np                                                                                             

Large_arr=np.array([[0.12046862, 0.64457892],                                                                  
 [0.47522597, 0.12350968],                                                                                     
 [0.1649585 , 0.50135502],                                                                                     
 [0.20104755 ,0.15218623],                                                                                     
 [0.03772419 ,0.42482297],                                                                                     
 [0.51633778 ,0.61209002],                                                                                     
 [0.24848648 ,0.99651906],                                                                                     
 [0.47374345, 0.09990318],                                                                                     
 [0.58390815 ,0.19781604],                                                                                     
 [0.9613725  ,0.45975827],                                                                                     
 [0.99008266 ,0.13487207],                                                                                     
 [0.14410988 ,0.36196475],                                                                                     
 [0.81349573 ,0.55896232],                                                                                     
 [0.72841399 ,0.02263056],                                                                                     
 [0.8692731  ,0.9754183 ],                                                                                     
 [0.87142787 ,0.66163271],                                                                                     
 [0.24342035 ,0.95821073],                                                                                     
 [0.94218857 ,0.7220602 ],                                                                                     
 [0.66716105 ,0.96875209]])                                                                                    

sub_arr=np.array([[0.12046862, 0.64457892],                                                                    
                 [0.51633778 ,0.61209002],                                                                     
                 [0.99008266 ,0.13487207],                                                                     
                 [0.72841399 ,0.02263056],                                                                     
                 [0.24342035 ,0.95821073],                                                                     
                 [0.47374345, 0.09990318],                                                                     
                 [0.9613725  ,0.45975827]])                                                                    



s=[]                                                                                                           
for i in range(0,len(Large_arr)):                                                                              
    for j in range(0,len(sub_arr)):                                                                            
        if((sub_arr[j]==Large_arr[i]).all()):                                                                  
            s.append(i)                                                                                        
            print("Value of s is\n",s)                                                                         
        else:                                                                                                  
            #print("Value is none\n")                                                                          
            pass                                                                                               

opt = np.isin(Large_arr,sub_arr)                                                                               

print                                                                                                          
print "Bool array"                                                                                             
print opt                                                                                                      
print                                                                                                          
print "indexes"                                                                                                
print np.where(opt[:,0])[0]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню