Python 在numpy中生成1-0数组

Python 在numpy中生成1-0数组,python,arrays,numpy,Python,Arrays,Numpy,我是新来的 基本上我想做的是生成一个24小时的时间信号,在6小时的时间间隔内,前30分钟信号为1,其余时间为0 换言之— t=0到t=0.5,数组的值为1 t=6到t=6.5,数组的值为1 t=18到t=18.5,数组的值为1 在所有其他时间,它都是0 我的做法如下: time是时间数组(以小时为单位) inFlowArray是所需的信号。它是时间的函数 这是守则- tStart = 0 tEnd = 24 dt = 0.1 time = np.arange(0, tEnd, dt) # i

我是新来的

基本上我想做的是生成一个24小时的时间信号,在6小时的时间间隔内,前30分钟信号为1,其余时间为0

换言之—

  • t=0
    t=0.5
    ,数组的值为1
  • t=6
    t=6.5
    ,数组的值为1
  • t=18
    t=18.5
    ,数组的值为1
  • 在所有其他时间,它都是0
  • 我的做法如下:

    • time
      是时间数组(以小时为单位)
    • inFlowArray
      是所需的信号。它是时间的函数
    这是守则-

    tStart = 0
    tEnd = 24
    dt = 0.1
    time = np.arange(0, tEnd, dt) # in hours
    
    inFlowArray = np.logical_or.reduce(np.array(((time<=0.5), 
        np.logical_and(time>=6, time<=6.5), np.logical_and(time>=12, 
        time<=12.5), np.logical_and(time>=18, time<=18.5))))
    
    inFlowArray = inFlowArray.astype(int)
    
    tStart=0
    倾向=24
    dt=0.1
    时间=np.arange(0,倾向,dt)#小时
    inFlowArray=np.logical_或.reduce(np.array)((time=6,time=12,
    时间=18,时间使用numpy的
    .tile
    (): 这将创建一个python列表,其中包含6个1,后跟54个0,表示6小时。然后numpy
    .tile
    方法将此模式复制4次,以获得表示24小时的数组。

    使用numpy的
    .tile
    ():
    这将创建一个python列表,其中包含6个1,后跟54个0,表示6小时。然后numpy
    .tile
    方法将此模式复制4次,以获得表示24小时的数组。

    您可以使用模运算符
    %

    >>> (time % 6 <= 0.5).view(np.int8)
    array([1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
           1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)
    
    所以你不得不求助于一些稍微不那么优雅的东西:

    (time % 6 <= 0.40001).view(np.int8)
    array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
           1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)
    

    (时间%6您可以使用模运算符
    %

    >>> (time % 6 <= 0.5).view(np.int8)
    array([1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
           1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)
    
    所以你不得不求助于一些稍微不那么优雅的东西:

    (time % 6 <= 0.40001).view(np.int8)
    array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
           1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)
    

    (时间%6此处可使用列表理解:

    v = [ 1 if round(t) % 6 == 0 else 0
            for t in time ]
    
    print(v)
    
    输出:

    [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    

    可转换为所需的任何形式。

    此处可使用列表理解:

    v = [ 1 if round(t) % 6 == 0 else 0
            for t in time ]
    
    print(v)
    
    输出:

    [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    
    可转换为所需的任何形式。

    延迟到该方:

    • 确定一个时期
    • 根据需要重复几次
    • 重塑


    迟到的人:

    • 确定一个时期
    • 根据需要重复几次
    • 重塑



    是的,但是如果我模拟120小时呢?如果条件必须手动写入。120小时需要什么模式?每6小时半小时?如果是,你应该在你的问题中添加12-12.5也是1。是的,相同的模式。但是在这种情况下,我必须添加几个条件,比如48到48.5,等等。我已经编辑了我的答案a如果是圆形(t),则可以使用
    %6==0:
    是的,但是如果我在120小时内模拟呢?if条件必须手动编写。120小时内你想要什么模式?每6小时半小时?如果是,你应该在你的问题中添加12-12.5作为1。是的,相同的模式。但是在这种情况下,我必须添加几个条件,比如48到48.5,等等。我已经添加了上面编辑了我的答案。如果是圆形(t),您可以使用
    %6==0:
    非常感谢。这是一个简短、简单而优雅的警告。@97Amarnath谢谢!我添加了一个重要的警告。请务必阅读。为什么会发生这种情况?你能解释一下吗?@97Amarnath浮点不准确。
    0.1
    0.000110011…
    二进制,计算机中的无限二进制分数必须是tr某处未加密。这种不准确会导致像我们刚刚观察到的那样的小麻烦。谢谢,非常感谢。这是简短、简单和优雅的。@97Amarnath谢谢!我添加了一个重要的警告。请务必阅读。为什么会发生这种情况?你能解释一下吗?@97Amarnath浮点不准确。
    0.1
    is
    0.000110011…二进制,一个在计算机中必须在某个地方截断的无限二进制分数。这种不准确会导致像我们刚才观察到的那样的小麻烦。