Не удалось добавить элемент в пустой массив. Разница между вставкой, добавлением и объединением - PullRequest
0 голосов
/ 26 октября 2018

Que: задан матричный мат размером 3 x 3. Найти все четные числа, расположенные в каждой из строк, итоговая совокупная сумма которых больше или равна 150.

[[ 51  21  14]
 [ 56  85  22]
 [ 99 666 230]]

Ответ: [56 22 666 230]

import numpy as np 

mat = np.array([[51,21,14], 
                [56,85,22], 
                [99,666,230]]).reshape(3,3)



mat = np.array([[51,21,14],[56,85,22],[99,666,230]]).reshape(3,3)
dim = np.arange(0,mat.ndim+1)
a = np.array([])

for ele in mat:
    if np.sum(ele)>=150:
        for c in ele:
            if c%2==0:
                np.insert(a,0,[c])
                print(a)

Проблема: я получаю пустой массив.Теперь я попытался добавить, объединить, а также.Я считаю, что при вставке элемента в коде есть что-то принципиально неправильное.Может ли кто-нибудь помочь, а также поделиться ссылкой / концепцией, объясняющей разницу между вставкой, объединением и добавлением, специально сфокусированных для массивов с нулями.

TIA.

1 Ответ

0 голосов
/ 26 октября 2018

Итерация - не лучший способ решить эту проблему.Все эти операции легко vectorize способны с numpy:

m = mat.sum(1) >= 150
t = mat[m]
t[t % 2 == 0]

array([ 56,  22, 666, 230])

Пояснение

Создание маски строк с суммой более 150

>>> m = mat.sum(1) >= 150
>>> m
array([False,  True,  True])

Индексирование вашего массива с помощью логической маски

>>> t = mat[m]
>>> t
array([[ 56,  85,  22],
       [ 99, 666, 230]])

Наконец, найдите четные элементы

>>> t[t % 2 == 0]
array([ 56,  22, 666, 230])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...