微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在numpy中使用条件替换其列或行索引的值?

如何解决如何在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 举报,一经查实,本站将立刻删除。