python中值为0的任何数都为false_Python numpy将0更改为1,而不将False更改为1

如果Numpy数组是同构的,或者至少当它们有一个与之相关联的固定类型模式时,Numpy数组是最有效的。您只能将ragtag值集合保存在dtype=object的numpy数组中,这可能是使用numpy所能做的效率最低的事情。在

相应地,没有高效的(我所知道的)方法允许您访问每个元素的类型。这并不是在使用numpy时经常出现的问题。在

所以我能想到的使代码更优雅的唯一方法就是将双循环转换为函数调用。我将使用map,这可能仍然不如本机numpy函数快(因为后者是用C编译的),但它可能比python的双循环更快,也更清晰。在

不过,有一点我也在评论中提到:你的示例数据不是矩形的,也就是说,不管你怎么努力,它都不能转换成2d numpy数组。我假设您在组装MCVE时犯了一个错误,并从示例数据的第四行中省略了一个元素(从而使您的数组(4,7)形状)。在import numpy as np

# dummy data as nested list, make sure it's rectangular

datlist = [[0.03829744, 0.0, True, False, True, True, 6.0],

[0.0, 0.0, True, False, True, True, 6.0],

[0.09174341, 0.0, True, False, True, True, 6.0],

[0.03489284, 0, True, True, False, 0, 6.0]] #dropped an element here

# create a numpy array of dtype object from datlist

dat = np.array(datlist,dtype=object)

我从你的例子中得知这是你的出发点。现在,我要做的是定义一个函数来检查数组元素的值和类型,对于非bool零返回-1。然后可以将此函数map添加到数组中,使用.ravel()访问整个数据范围:

^{pr2}$

生成的数组如下所示:array([[0.03829744, -1, True, False, True, True, 6.0],

[-1, -1, True, False, True, True, 6.0],

[0.09174341, -1, True, False, True, True, 6.0],

[0.03489284, -1, True, True, False, -1, 6.0]], dtype=object)

如您所见,float和integer的0都被转换为-1。这对我来说是有意义的,这是因为我们只检查了非False个零。{7}你可以很容易地分辨出这两种。如果要切换bool值,也可以这样做。下面是一个升级的函数,它将转换0.0 -> -1,0 -> -1,False -> 0,True -> 1,other -> other:def zeroswap(elem):

if type(elem) is bool:

return int(elem)

elif elem==0:

return -1

else:

return elem

您可以尝试将此函数调用到不同的元素,以确保它执行预期的操作。底线是您应该map该函数覆盖数组的展开版本,这样您就可以在不必知道数组维数的情况下进行操作。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值