Эффективная работа на пустых массивах содержит строки с разным размером - PullRequest
0 голосов
/ 24 октября 2019

Я хочу спросить кое-что, что связано с этим вопросом, отправленным время назад Операция над массивными массивами содержит строки с другим размером . Дело в том, что мне нужно выполнить некоторые операции с массивами-пустышками, которые содержат строки разного размера.

Стандартный способ, такой как "list2 * list3 * np.exp (list1)", не работает, поскольку строкиот другого размера, и вариант, который работает, использует zip. См. Приведенный ниже код.

import numpy as np
import time

list1 = np.array([[2.,0.,3.5,3],[3.,4.2,5.,7.1,5.]])
list2 = np.array([[2,3,3,0],[3,8,5.1,7.6,1.2]])
list3 = np.array([[1,3,8,3],[3,4,9,0,0]])

start_time = time.time()

c =[]
for i in range(len(list1)):
    c.append([list2*list3*np.exp(list1) for list1, list2,list3 in zip(list1[i], list2[i],list3[i])])

print("--- %s seconds ---"% (time.time()-start_time))

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

1 Ответ

1 голос
/ 24 октября 2019

Это должно сделать это:

f = np.vectorize(lambda x, y, z: y * z * np.exp(x))

result = [f(*i) for i in np.column_stack((list1, list2, list3))]

result

#[array([ 14.7781122 ,   9.        , 794.77084701,   0.        ]),
# array([ 180.76983231, 2133.96259331, 6812.16400281,    0.        ,    0.        ])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...