Умножение двух массивов в python на разные длины

1

Я хочу знать, можно ли решить эту проблему. У меня есть следующие значения:

yf = (0.23561643, 0.312328767,  0.3506849315, 0.3890410958,  0.4273972602,  0.84931506)
z = (4.10592285e-05,  0.0012005020, 0.00345332906,  0.006367483, 0.0089151571,  0.01109750, 0.01718827)

Я хочу использовать эту функцию (коэффициент скидки), но она не будет работать из-за разных длин между z и yf.

def f(x): 
        res = 1/( 1 + x * yf)
        return res
f(z) 
output: ValueError: cannot evaluate a numeric op with unequal lengths

Мой вопрос в том, что, если он существует, способ решить это. Примерные выходные значения:

res = (0.99923, 0.99892, 0.99837, 0.99802, 0.99763, 0.99175)

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

  • 0
    Не могли бы вы объяснить, что вы хотите, чтобы произошло с дополнительным значением в z? Вы просто хотите, чтобы его выбросили?
Теги:
arrays
numpy
vector
multiplication

2 ответа

1
Лучший ответ

Вы хотите, чтобы массив транслировался в зависимости от того, что меньше? Вы можете сделать это

def f(x): 
    leng = min(len(x), len(yf))
    x = x[:leng]
    new_yf = yf[:leng] # Don't want to modify global variable.
    res = 1/( 1 + x * new_yf)
    return res

и он должен работать.

  • 1
    используйте min(len(x), len(yf))
  • 0
    Большое спасибо @Rocky Li, все работает отлично.
1
Find the minimum length and iterate. Can also covert to numpy arrays and that would avoid a step of iteration

import numpy as np
yf = (0.23561643, 0.312328767,  0.3506849315, 0.3890410958,  0.4273972602,  0.84931506)
z = (4.10592285e-05,  0.0012005020, 0.00345332906,  0.006367483, 0.0089151571,  0.01109750, 0.01718827)
x=min(len(yf),len(z))

res = 1/( 1 + np.array(z[:x]) * np.array(yf[:x]))

используя numpy.multiply

res = 1/( 1 + np.multiply(np.array(z[:x]),np.array(yf[:x])))
  • 0
    Спасибо @mad_. Этот тоже работает

Ещё вопросы

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