Numpy функция, работающая на двух ndarrays - PullRequest
1 голос
/ 24 апреля 2019

Учитывая два ndarrays a = np.asarray([[0,1,2],[3,4,5]]) и b = np.asarray([[6,7,8],[9,10,11]]) Я хочу написать функцию, которая выполняет итерации по a и b, так что

  1. [0,1,2] и [6,7,8] считаются
  2. [3,4,5] и [9,10,11] считаются

Примером может служить функция, которая принимает

  1. [0,1,2] и [6,7,8] в качестве входа и выхода 0 * 6 + 1 * 7 + 2 * 8 = 23
  2. [3,4,5] и [9,10,11] в качестве входа и выхода 3 * 9 + 4 * 10 + 5 * 11 = 122

-> (23 122)

Есть ли способ сделать это эффективно в NumPy? Моя идея заключалась в том, чтобы сжать оба массива, но это неэффективно.

Редактировать: я ищу способ применения настраиваемой функции myfunc(x,y). В предыдущем примере myfunc(x,y) соответствовало умножению.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2019

the proper output
импортировать NumPy как NP a = np.asarray ([[0,1,2], [3,4,5]]) b = np.asarray ([[6,7,8], [9,10,11]]) с = а * б печать (сумма (с [0]), сумма (с 1 )) ans-> 23122

0 голосов
/ 24 апреля 2019

Не нужно использовать zip оба массива, вам нужно понимать, что numpy пакет поможет вам хорошо работать с матрицей.Итак, вам нужны базовые знания о матрице, я рекомендую вам узнать по этой ссылке http://cs231n.github.io/python-numpy-tutorial/, от CS231n Стэнфордского университета.Эта функция может решить вашу проблему:

 import numpy as np
 def interates(matrix_a, matrix_b):
    product = matrix_a*matrix_b
    return (np.sum(product,1))

Значение продукта содержит новую матрицу с одинаковой формой matrix_a и matrix_b, каждый элемент в которой является результатом matrix_a[i][j] * matrix_b[i][j] с i и j, запущенными изОт 0 до matrix_a.shape[0] и matrix_a.shape[1].

Теперь сверьтесь со своим примером

a = np.asarray([[0,1,2],[3,4,5]])
b = np.asarray([[6,7,8],[9,10,11]])
result = interates(a,b)

Результат печати

>> print(result)
>> [23 122]

Если вы хотите кортеж

>> result = tuple(result)
>> print(result)
>> (23, 122)
0 голосов
/ 24 апреля 2019
c = a * b 
sum1 = c[0].sum()
sum2 = c[1].sum() 

если вы хотите алгоритмическим способом (пользовательская функция)

a = np.asarray([[0,1,2],[3,4,5]])
b = np.asarray([[6,7,8],[9,10,11]])


for i in range(a.shape[0]) : 
  s = 0
  for j in range(a.shape[1]) :
    s = s + a[i][j]*b[i][j]
  print(s)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...