【问题标题】:numpy.array boolean to binary?numpy.array 布尔到二进制?
【发布时间】:2012-05-10 00:17:21
【问题描述】:

我正在尝试在 python27 中重写 matlab 代码。 matlab中有一行如下:

vector_C = vector_A > vector_B;

如果我尝试使用 numpy 在 python 中编写它,它会是相同的,但结果将是一个布尔数组而不是二进制文件。我希望结果是二进制文件。有没有办法让它返回二进制文件或者我应该每次都手动转换?有没有快速转换的方法?我是 python 新手。谢谢。

【问题讨论】:

  • 我相信 matlab binary 和 python boolean 是等价的。您在 matlab 代码中使用二进制向量执行的操作是否无法使用 numpy 布尔向量执行?
  • 我还没有尝试对布尔向量做任何事情。但是,我只是将布尔向量除以“1”,所以它现在是二进制的。我想我也可以不加任何修改地使用它。谢谢
  • 如果这对您有用,请回答您自己的问题以关闭它。

标签: python numpy


【解决方案1】:

即使vector_C 可能有dtype=bool,您仍然可以进行如下操作:

In [1]: vector_A = scipy.randn(4)

In [2]: vector_B = scipy.zeros(4)

In [3]: vector_A
Out[3]: array([ 0.12515902, -0.53244222, -0.67717936, -0.74164708])

In [4]: vector_B
Out[4]: array([ 0.,  0.,  0.,  0.])

In [5]: vector_C = vector_A > vector_B

In [6]: vector_C
Out[6]: array([ True, False, False, False], dtype=bool)

In [7]: vector_C.sum()
Out[7]: 1

In [8]: vector_C.mean()
Out[8]: 0.25

In [9]: 3 - vector_C
Out[9]: array([2, 3, 3, 3])

所以,简而言之,您可能不需要做任何额外的事情。

但如果你必须进行转换,你可以使用astype:

In [10]: vector_C.astype(int)
Out[10]: array([1, 0, 0, 0])

In [11]: vector_C.astype(float)
Out[11]: array([ 1.,  0.,  0.,  0.])

【讨论】:

    【解决方案2】:

    您可以强制 numpy 将元素存储为整数。它将 0 视为假,将 1 视为真。

    import numpy
    
    vector_C = numpy.array( vector_A > vector_B, dtype=int) ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2014-08-13
      • 2014-03-30
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多