Python 2D NumPy 数组理解

标签 python numpy multidimensional-array list-comprehension

我是 NumPy 新手。我有一个包含浮点值的二维 NumPy 数组。我希望获得整个矩阵中大于某个值 70% 的元素的索引,例如 t

输出 = [(1,2),(4,7),(7,1)] 表示 arr[1][2]arr[4][7]arr[7][1] 的值大于 70 % 的 t

使用 2 个循环来完成工作是一种相当简单的方法。完成它的最 Pythonic 方法是什么(列表理解等)?请指出任何重复的内容。谢谢!

最佳答案

一个例子:

In [76]: arr=np.arange(20, dtype=float).reshape(4,5)

In [77]: arr
Out[77]: 
array([[  0.,   1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.],
       [ 15.,  16.,  17.,  18.,  19.]])

可以从数组中选择值的 bool 索引

In [79]: arr>15
Out[79]: 
array([[False, False, False, False, False],
       [False, False, False, False, False],
       [False, False, False, False, False],
       [False,  True,  True,  True,  True]], dtype=bool)

In [80]: arr[arr>15]
Out[80]: array([ 16.,  17.,  18.,  19.])

条件为真时的索引,也可用于选择元素

In [81]: I=np.nonzero(arr>15)

In [82]: I
Out[82]: (array([3, 3, 3, 3], dtype=int32), array([1, 2, 3, 4], dtype=int32))

In [83]: arr[I]
Out[83]: array([ 16.,  17.,  18.,  19.])

或者将索引元组转换为对列表

In [84]: list(zip(*I))
Out[84]: [(3, 1), (3, 2), (3, 3), (3, 4)]

In [87]: [arr[j] for j in zip(*I)]
Out[87]: [16.0, 17.0, 18.0, 19.0]

关于Python 2D NumPy 数组理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30552680/

相关文章:

python - 描述文件的 python pickleable 对象的设计

python - 有向线段之间的符号角

Python unicode文件写入

python - 与敌人碰撞时减去生命不工作pygame

c - C(堆)中的多维数组内存使用

arrays - 在数组的数组上应用过滤器函数在 Scala 中返回异常

python - 绘制两个数组的最小值

Python - 对数组进行排序以在其中进行搜索的最有效方法

python - 如何使用 numpy/matplotlib 绘制概率分布?

java - 深度复制具有不同类的多维对象数组的正确方法