我有一个n x m
矩阵X
和一个n x p
矩阵Y
,其中Y
是二进制数据。最后,我想要一个p x n
矩阵Z
,其中Z
的列是X
的列子集的函数,它对应于Y
中的1。你知道吗
例如
>>> X
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> Y
array([[1, 0],
[1, 0],
[0, 1]])
n_x,m = X.shape
n_y,p = Y.shape
Z = np.zeros([p, n_x])
for i in range(n_x):
col = X[:,[i]]
for j in range(p):
#this is where I subset col with Y[:,[j]]
Z[j][i] = my_func(subsetted_column)
迭代将产生
i=0, j=0: subsetted_column = [[1],[4]]
i=0, j=1: subsetted_column = [[7]]
i=1, j=0: subsetted_column = [[2],[5]]
i=1, j=1: subsetted_column = [[8]]
i=2, j=0: subsetted_column = [[3],[6]]
i=2, j=1: subsetted_column = [[9]]
我假设有某种方法可以在单个列表中实现嵌套循环。函数my_func
也需要很长的时间,所以最好以某种方式并行化。你知道吗
编辑:我可以做
for i in range(n_x):
for j in range(p):
subsetted_column = np.trim_zeros(np.multiply(X[:,i], Y[:,j]))
Z[j][i] = my_func(subsetted_column)
但我仍然相信有一个更简单的解决办法
它可能有助于在预处理循环中执行子集设置
(
.T
用于迭代列表理解中的列;bool
允许“屏蔽”选择)比如说,对于子集,
my_func
取轴上的平均值=0我可以把它组合成一个循环,但更难思考:
有了这个
xs
列表,您可以像np.mean(xs[i], axis=0)
那样,集中精力将my_func
有效地应用于xs[i]
的所有列。你知道吗这个平均数的双环版本
等价双表理解
这是你想要的吗?你知道吗
备注:
dtype bool
最简单,因为这样可以使用逻辑索引。你知道吗your_func
只返回一个数字,最好不要将dtype=object
用于out
。你知道吗样本输出:
相关问题 更多 >
编程相关推荐