Как вычислить формулу расстояния между 1-м и 2-м массивом? - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь вычесть массив 1d:

probe = [1, 2, 3, 4, 5, 6] 

из каждого элемента в массиве nd:

k = np.array([["words words ", 1,1,3,4,6,7], ["blah blah", 2,8,7,5,3,2], [" please help me", 3,4, 5, 6, 7,1], [" What are you doing, man", 1,3,5,10,9,11]])

Я удалил 0-й индекс массива k и сохранилэти значения в new_k, так что теперь сравнение выполняется между значениями в обоих массивах, которые я хочу сравнить.

new_k = k
new_k = np.delete(new_k, 0, axis=1)

Я пытаюсь найти значение в массиве nd, которое ближе всего к входу. Мне нужна помощь.

Пока мне удалось добраться сюда, но я заблудился.: * 10101

for i in range(len(new_k)):
    for j in range(len(new_k[0][1])):
        temp[j] = (new_k[1][j] - probe[j])
        new_k[i][1] = temp

print(new_k)
new_k2 = new_k*new_k

вышеприведенный код выдает эту ошибку:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

также:Я знаю, как получить «самое близкое значение», сравнивая одно значение с массивом значений, но я хочу сделать это с массивами для массивов

Ответы [ 4 ]

0 голосов
/ 14 декабря 2018

Массивы Numpy не должны иметь несколько типов данных.k на самом деле является массивом строк, поэтому в вашем массиве нет числовых типов данных для вычитания k.

Если вы хотите сохранить свой первый столбец строк, вам следует посмотреть на pandas dataframes,Вы можете сохранить строку в качестве индекса для информационного кадра, но по-прежнему работать с ней как с массивом числовых данных.С вашими данными вы можете сделать что-то вроде этого:

df = pd.DataFrame(k[:, 1:].astype(int), index=k[:, 0])
df - probe
0 голосов
/ 14 декабря 2018

Проблема в том, что numpy не похож на обычный список и одновременно содержит только уникальные элементы типа.Если существует более 1 типа, все преобразуются в U32, что является string.Когда вы удаляете 1-й элемент из списка, остальные все еще имеют строковый тип, а не int.Вы должны были преобразовать их в int.И поэтому эта ошибка возникает:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

при попытке это:

temp[j] = (new_k[1][j] - probe[j])
0 голосов
/ 14 декабря 2018
In [263]: probe = [1, 2, 3, 4, 5, 6] 

k имеет dtype, который вмещает строки:

In [264]: k = np.array([["words words ", 1,1,3,4,6,7], ["blah blah", 2,8,7,5,3,2
     ...: ], [" please help me", 3,4, 5, 6, 7,1], [" What are you doing, man", 1
     ...: ,3,5,10,9,11]])
In [265]: k
Out[265]: 
array([['words words ', '1', '1', '3', '4', '6', '7'],
       ['blah blah', '2', '8', '7', '5', '3', '2'],
       [' please help me', '3', '4', '5', '6', '7', '1'],
       [' What are you doing, man', '1', '3', '5', '10', '9', '11']],
      dtype='<U24')

Но, вырезав первый столбец, остальные можно преобразовать в целочисленный массив:

In [266]: k[:, 1:].astype(int)
Out[266]: 
array([[ 1,  1,  3,  4,  6,  7],
       [ 2,  8,  7,  5,  3,  2],
       [ 3,  4,  5,  6,  7,  1],
       [ 1,  3,  5, 10,  9, 11]])

Это массив (4,6).np.array(probe) - это (6,);вещание позволяет нам вычесть, что:

In [270]: k[:, 1:].astype(int) - np.array(probe)
Out[270]: 
array([[ 0, -1,  0,  0,  1,  1],
       [ 1,  6,  4,  1, -2, -4],
       [ 2,  2,  2,  2,  2, -5],
       [ 0,  1,  2,  6,  4,  5]])
0 голосов
/ 14 декабря 2018
np.asarray(k[:,1:], dtype=int) - probe
...