无法在空数组中添加元素。 insert,append和concatenate之间的区别

问题描述 投票:1回答:1

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)

问题:我得到空数组。现在我尝试追加,连接也是如此。我相信插入元素时代码中存在根本性的错误。有人可以帮助以及共享链接/概念,解释插入,连接和追加专注于numpy数组之间的差异。

TIA。

python arrays numpy concatenation
1个回答
2
投票

迭代不是解决此问题的最佳方法。所有这些操作都很容易用vectorize进行numpyable:

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])
© www.soinside.com 2019 - 2024. All rights reserved.