根据不同的列条件(例如,按列2的值分组)和运行2D
和{NumPy
f1()
矩阵行的有效(时间,简单)方法是什么? {1}}在每个群组上?
由于
答案 0 :(得分:10)
如果你有一个形状arr
的数组(rows, cols)
,你可以获得第2列中所有值的向量
col = arr[:, 2]
然后,您可以使用分组条件构造一个布尔数组,例如,第1组由第2列中值大于5的行组成:
idx = col > 5
您可以将此布尔数组直接应用于原始数组以选择行:
group_1 = arr[idx]
group_2 = arr[~idx]
例如:
>>> arr = np.random.randint(10, size=(6,4))
>>> arr
array([[0, 8, 7, 4],
[5, 2, 6, 9],
[9, 5, 7, 5],
[6, 9, 1, 5],
[8, 0, 5, 8],
[8, 2, 0, 6]])
>>> idx = arr[:, 2] > 5
>>> arr[idx]
array([[0, 8, 7, 4],
[5, 2, 6, 9],
[9, 5, 7, 5]])
>>> arr[~idx]
array([[6, 9, 1, 5],
[8, 0, 5, 8],
[8, 2, 0, 6]])
答案 1 :(得分:5)
一个紧凑的解决方案是使用numpy_indexed(免责声明:我是它的作者),它为这类问题实现了一个完全矢量化的解决方案:
使用它的最简单方法是:
import numpy_indexed as npi
npi.group_by(arr[:, col1]).mean(arr)
但这也有效:
# run function f1 on each group, formed by keys which are the rows of arr[:, [col1, col2]
npi.group_by(arr[:, [col1, col2]], arr, f1)
答案 2 :(得分:0)
from operator import itemgetter
sorted(my_numpy_array,key=itemgetter(1))
或者类似
之类的东西from itertools import groupby
from operator import itemgetter
print groupby(my_numpy_array,key = itemgetter(1))