【发布时间】:2016-05-15 09:35:58
【问题描述】:
我正在尝试在不使用循环的情况下在 Numpy 上执行以下操作:
- 我有一个维度为 N*d 的矩阵 X 和一个维度为 N 的向量 y。 y 包含从 1 到 K 的整数。
- 我正在尝试获取大小为 K*d 的矩阵 M,其中 M[i,:]=np.mean(X[y==i,:],0)
我可以在不使用循环的情况下实现这一点吗?
使用循环,它会变成这样。
import numpy as np
N=3
d=3
K=2
X=np.eye(N)
y=np.random.randint(1,K+1,N)
M=np.zeros((K,d))
for i in np.arange(0,K):
line=X[y==i+1,:]
if line.size==0:
M[i,:]=np.zeros(d)
else:
M[i,:]=mp.mean(line,0)
提前谢谢你。
【问题讨论】:
-
K == N 吗? y 的值是否唯一?
-
如果你显示一些代码会很酷。
-
如果您将输入写成我们可以运行的短代码 sn-p 会有所帮助,例如
y = np.random.random_integers(low=1, high=K, size=N)和X = ?并定义K、N等等。添加一些使用循环计算输出的代码会更有帮助,这样我们就可以清楚地了解您要实现的目标。 -
X在您的实际情况中也是单位矩阵还是它有随机数? -
与@Divakar 类似的问题:由于您将
X的元素与索引进行比较,X通常可以包含什么,它的dtype是什么?感谢您更新问题,现在更清楚了
标签: python numpy vectorization