применить функцию для разделения массива на вектор - PullRequest
0 голосов
/ 10 июля 2019

Я должен применить функцию, которая делит значение на другое для каждой строки массива numpy.

здесь функция:

def myfunc(a, b):
   return (a/b)

мой numpy ndarray выглядит следующим образомпредставляет значение "a":

[[ 1  2  3  4 ]
 [ 5  6  7  8 ]]

и мой список, который является моим значением b, выглядит следующим образом:

[1, 2, 3, 4]

Результат, который я хочу получить:

[[1 1 1 1]
 [5 3 2.33 2]]

Для этого я не могу использовать цикл, поэтому я попытался с помощью np.vectorize.Вот мой код:

test = np.vectorize(myfunc)
test(a, b)

это возвращение:

array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>,

[1]
<NDArray 1 @cpu(0)>]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
...

, поэтому каждая ячейка делится 4 раза на первое значение b.

, но по неизвестной причине мойкод не работает для ndarray.когда я пытался с обычным массивом, это работает.Пример:

a = np.array([[1, 2, 3, 4], [5,6,7,8]])
b = [1,2,3,4]
def my(coord, shape):
   return (coord/shape)
myfunc = np.vectorize(my)
myfunc(a, b)

результат:

array([[1.        , 1.        , 1.        , 1.        ],
       [5.        , 3.        , 2.33333333, 2.        ]])

Ребята, вы знаете, что я могу сделать?Я действительно не знаю, как получить ndarray, и почему я не могу получить правильный результат.

1 Ответ

0 голосов
/ 10 июля 2019

Зачем вам нужно np.vectorize?

In [511]: a = np.array([[1, 2, 3, 4], [5,6,7,8]]) 
     ...: b = [1,2,3,4]                                                                                      

In [512]: b = np.array(b)                                                                                    
In [513]: a.shape                                                                                            
Out[513]: (2, 4)
In [514]: b.shape                                                                                            
Out[514]: (4,)
In [515]: a / b                                                                                              
Out[515]: 
array([[1.        , 1.        , 1.        , 1.        ],
       [5.        , 3.        , 2.33333333, 2.        ]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...