如果值>=,如何用列索引替换n x n数组中的每个值1,否则使用行索引。如果替换后的值映射到其他1d数组并从中返回值,那就更好了。
value_array = np.array([200, 200, 300, 10])
arr = np.array(
[[1, 1, .66, 20],
[1, 1, .66, 20],
[1.5, 1.5, 1, 30],
[.05, .05, .03, 1]]
)
目标是获得一个大小相同的数组,其中包含value_array中的值。示例:
- 在位置[0,2]处,值为.66,小于1,因此需要行索引,该索引为0。0被索引到value_array中,并且结果矩阵位置[0,2]中的答案是200
- 在位置[0,3]处,值为20,其大于1,因此需要列索引,其为3。3被索引到value_array中,并且结果矩阵位置[0,3]中的答案是10
此外,要应用于大阵列(1m x 1m(执行,需要以某种方式将其拆分为多个部分。
单向使用numpy.select
:
conds = [arr>1, arr<1]
target = np.full(arr.shape, value_array)
np.select(conds, [target, target.T], arr)
输出:
array([[ 1., 1., 200., 10.],
[ 1., 1., 200., 10.],
[200., 200., 1., 10.],
[ 10., 10., 10., 1.]])
使用np.where
:的另一个选项
# I've rename value_array to v for simplicity.
# We use the broadcasting potential of numpy to get our result
res = np.where(arr>=1,v,v.reshape(len(v),1))
和res=
array([[200, 200, 200, 10],
[200, 200, 200, 10],
[200, 200, 300, 10],
[ 10, 10, 10, 10]])
这个解决方案也使用较少的内存,因为您不需要存储中间结果。