假设有一个H
by W
,2d数组x
和一个长度为H
的1d数组y
,它指定x
的每一行被分配给类y_i
。比如说,
x: [[1, 2, ...],
[3, 4, ...],
... ]
y: [1, 3, 0, 2, ...]
这意味着x的第一行在类1
中,第二行在类3
中,依此类推
然后,我需要计算每个类的行平均数。我想出了一种方法,在课堂上循环。下面是输入和输出的示例
x = np.array([[1, 2, 3], [1, 2, 3], [3, 4, 5], [4, 5, 6]])
y = np.array([1, 0, 0, 1])
row_means = np.ndarray([k, W]) # k is the max value in y so number of classes
for i in y:
row_means[i] = x[y == i].mean(axis=0)
row_means: array([[2. , 3. , 4. ],
[2.5, 3.5, 4.5]])
然而,我想不使用任何循环来计算它。有什么办法吗
单行解决方案将使用列表理解而不是循环,使用
set(y)
避免对y
中的相同值重复计算:使用
x
和y
返回以下内容:如果您关心的是性能,那么此解决方案的效率大约是带循环的解决方案的1.5倍,即使使用
for i in set(y)
而不是for i in y
。至少在我的机器上相关问题 更多 >
编程相关推荐