【发布时间】:2021-08-07 11:14:29
【问题描述】:
假设有一个形状为(N, M) 的矩阵A 和一些dtype。然后,有一个numpy 函数B 的向量,形状为(N, )。因为这可能很重要,对于我的具体情况,N 的范围以千为单位(例如 4000),M 的范围以单位为单位(例如 9)。
示例(N=5,M=3):
A =
[
[0.1, 0.2, 0.3],
[4.02, 123.4, 534.65],
[2.32, 22.0, 754.01],
[5.41, 23.1, 1245.5],
[6.07, 0.65, 22.12],
]
B = [
np.min,
np.max,
np.argmin,
np.argmin,
np.min
]
B[i] 将始终为 np.min、np.max、np.argmin 或 np.argmax。
我想对axis=1 执行操作,特别是对A[i, :] 执行操作B[i],产生以下输出:
[ 0.1, 534.65, 0, 0, 0.65 ]
这样的事情在 NumPy 中可以实现吗?
一种可能的解决方案是根据B 上的等价组拆分A,沿axis=1 应用单个操作,重新索引组并将它们合并回来,但这听起来效率很低。如果可能的话,我想避免这种情况。
如果我的提议对你来说听起来很荒谬,请告诉我。
【问题讨论】:
-
如果您关心效率,那么与 A 中的列数相比,函数的数量是否小很重要。是吗?
-
您提出的结果沿
axis=0(逐行)应用 -
要么是这样,要么是对
zip(A,B)的简单迭代。B是对象 dtype,本质上是一个列表。 -
@user2640045 抱歉,我应该在
N >> M中添加该信息。N以千为单位,M以单位为单位。 -
@SamarthBhatia 我作为示例向您展示的结果实际上与
axis=1一起应用。第一个轴是行,第二个轴是列。