无法在空数组中添加元素。插入,追加和串联之间的区别

时间:2018-10-26 17:09:58

标签: python arrays numpy concatenation

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)

问题:我正在获取空数组。现在我也尝试了append,concatenate。我相信插入元素时代码中根本存在错误。 有人可以帮忙分享一个链接/概念,以解释专门针对numpy数组的insert,concatenate和append之间的区别。

TIA。

1 个答案:

答案 0 :(得分:2)

迭代不是解决此问题的最佳方法。使用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])