2016-05-30 2 views
0

Я бег следующего кода для сортировки строк матрицы, а затем выбрать соответствующие элементы из другого вектора:Ошибка при индексировании массива Numpy

import pandas as pd 
import numpy as np 
# compute ids 
coeff = np.dot(matrix1, np.transpose(matrix2)) 
print coeff.shape, ids.shape 
indices = coeff.argsort()[:, ::-1] 
print indices.shape 
coeff_idx = ids[indices] 

Но я получаю ошибку, когда программа получает в последняя строка:

(11396, 45582) (11396,) 
(11396, 45582) 

... 
File "pandas/hashtable.pyx", line 359, in pandas.hashtable.Int64HashTable.lookup (pandas/hashtable.c:7427) 
ValueError: Buffer has wrong number of dimensions (expected 1, got 2) 

ответ

1

Numpy массивы позволяют integer array indexing, но панды серии нет:

In [168]: arr = np.arange(5) 

In [169]: ser = pd.Series(arr) 

In [170]: indices = np.array([[0,1],[4,3],[2,2]]) 

In [171]: arr[indices] 
Out[171]: 
array([[0, 1], 
     [4, 3], 
     [2, 2]]) 

In [172]: ser[indices] 
ValueError: Buffer has wrong number of dimensions (expected 1, got 2) 

Поэтому изменить ids из серии панды в массив NumPy, прежде чем пытаться его индексацию с indices:

ids = ids.values 
coeff_idx = ids[indices] 

 Смежные вопросы

  • Нет связанных вопросов^_^