Python 二维 NumPy 数组理解
Python 2D NumPy array comprehension
我是 NumPy 的新手。我有一个包含浮点值的二维 NumPy 数组。我希望在整个矩阵中获得大于某个值 70% 的那些元素的索引,比如 t 。
output = [(1,2),(4,7),(7,1)]
意思是 arr[1][2]、arr[4][7] 和 arr[7][1] 的值大于 t
的 70%
使用 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.]])
布尔索引,可以 select 数组中的值
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.])
条件为真的索引,也可用于select个元素
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]
我是 NumPy 的新手。我有一个包含浮点值的二维 NumPy 数组。我希望在整个矩阵中获得大于某个值 70% 的那些元素的索引,比如 t 。
output = [(1,2),(4,7),(7,1)]
意思是 arr[1][2]、arr[4][7] 和 arr[7][1] 的值大于 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.]])
布尔索引,可以 select 数组中的值
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.])
条件为真的索引,也可用于select个元素
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]