如何解决如何在numpy中使用条件替换其列或行索引的值?
如果值> = 1,如何用列索引替换n x n数组中的每个值,否则用行索引替换。 如果替换后的值可以映射到其他一维数组并从中返回值,那就更好了。
value_array = np.array([200,200,300,10])
arr = np.array(
[[1,1,.66,20],[1,[1.5,1.5,30],[.05,.05,.03,1]]
)
目标是从value_array获得包含大小的相同大小的数组。 例子:
- 在位置[0,2]上的值是.66,该值小于1,因此需要行索引为0。然后将0索引到value_array中,结果矩阵position [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.,[200.,[ 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,10],[200,300,[ 10,10,10]])
此解决方案还使用较少的内存,因为您不需要存储中间结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。