python二维向量运算_python中二维数组的Elementwise与or或运算

numpy有logical_or、logical_xor和{},它们有一个reduce方法>> np.logical_or.reduce(a, axis=0)

array([ True, False, False, False, False, False, False, False], dtype=bool)

正如您在示例中看到的,它们强制使用bool数据类型,因此,如果您需要uint8的话,您必须在最后进行转换。在

因为bool是以字节形式存储的,所以可以使用廉价的viewcasting。在

使用axis关键字,您可以选择要缩小的轴。可以选择多个轴

^{pr2}$

keepdims关键字对于广播很有用,例如查找数组b中行和列的所有“交叉”>=2>>> b = np.random.randint(0,10, (4, 4))

>>> b

array([[0, 5, 3, 4],

[4, 1, 5, 4],

[4, 5, 5, 5],

[2, 4, 6, 1]])

>>> rows = np.logical_and.reduce(b >= 2, axis=1, keepdims=True)

# keepdims=False (default) -> rows.shape==(4,) keepdims=True -> rows.shape==(4, 1)

>>> cols = np.logical_and.reduce(b >= 2, axis=0, keepdims=True)

# keepdims=False (default) -> cols.shape==(4,) keepdims=True -> cols.shape==(1, 4)

>>> rows & cols # shapes (4, 1) and (1, 4) are broadcast to (4, 4)

array([[False, False, False, False],

[False, False, False, False],

[False, False, True, False],

[False, False, False, False]], dtype=bool)

注意,&运算符有点滥用,它代表bitwise_and。因为对bools的效果是一样的(事实上,在这个地方尝试使用and会引发一个异常),所以这是一种常见的做法

正如@ajcr指出的,流行的np.any和{}是{}和{}的简写。

不过,请注意,两者之间存在细微的差异>>> np.logical_or.reduce(a)

array([ True, False, False, False, False, False, False, False], dtype=bool)

>>> np.any(a)

True

或者:

如果您想坚持使用uint8,并且知道您的所有条目都是0和1,那么可以使用bitwise_and、bitwise_or和{}>>> np.bitwise_or.reduce(a, axis=0)

array([1, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值