Python Умножение, суммирование массивов различной длины: оптимизация кода - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь манипулировать массивами массивов различной формы. Когда я вызываю np.sum или np.multiply All time ValueError: операнды не могут быть переданы вместе с формами (60,) (37,)

Я пытаюсь разрешить эту функцию, любые другие идентификаторы, пожалуйста ??

def get_Value(ArrayA,ArrayB,ArrayC,,ArrayE): 
    if len(ArrayB)>len(ArrayD):
        ArrayD=np.append(ArrayD,np.repeat(0, len(ArrayB)-len(ArrayD)))
    elif len(ArrayB)<len(ArrayD):
        ArrayB=np.append(ArrayB,np.repeat(0, len(ArrayD)-len(ArrayB)))

    if len(ArrayC)>len(ArrayE):
        ArrayE=np.append(ArrayE,np.repeat(0, len(ArrayC)-len(ArrayE)))
    elif len(ArrayC)<len(ArrayD):
        ArrayB=np.append(ArrayC,np.repeat(0, len(ArrayE)-len(ArrayC)))

    return ArrayA+(ArrayB*ArrayD)+(ArrayC*ArrayE)

1 Ответ

0 голосов
/ 11 февраля 2020

Вы можете попробовать следующее:

import numpy as np

def zero_pad(a, newlen):
    result = np.zeros(newlen, dtype=a.dtype)
    result[:len(a)] = a
    return result
    # alternatively: return np.pad(a, (0, newlen - len(a)), 'constant')


def get_value(a, b, c, d, e):
    maxlen = max([len(ar) for ar in [a, b, c, d, e]])
    a = zero_pad(a, maxlen)
    b = zero_pad(b, maxlen)
    c = zero_pad(c, maxlen)
    d = zero_pad(d, maxlen)
    e = zero_pad(e, maxlen)
    return a + (b * d) + (c * e)

print(get_value(np.arange(4), np.arange(8), np.arange(3), np.arange(2), np.arange(5)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...