【问题标题】:How do you have if statements with a numpy array?你如何拥有带有 numpy 数组的 if 语句?
【发布时间】:2014-04-09 21:38:07
【问题描述】:

我有以下输入文件'r1'

14 14
15 15

我想创建以下输出文件 'r2'。

14 14 less than 15
15 15 equal to 15

我正在尝试使用以下代码。

import numpy as np

s=open('r1')
r=open('r2','w+')

r1=np.loadtxt(s)
atim=r1[:,[0]]
alat=r1[:,[1]]

if atim<15 and alat<15:
    print >> r,atim,alat,'less than 15'

if atim==15 and alat==15:
    print >> r,atim,alat,'equal to 15'

但是,当我运行程序时,我收到以下错误 如果 atim

【问题讨论】:

  • 这是一个非常好的错误消息,您是否尝试按照您收到的建议进行跟进?

标签: python arrays numpy


【解决方案1】:

你想做一个类似的比较

all(i < 15 for i in r1[0])
all(i == 15 for i in r1[0])

所以你可以这样做:

for row in len(r1):
    if all(i < 15 for i in r1[row]):
        print >> r,r1[row][0], r1[row][1], 'less than 15'
    if all(i == 15 for i in r1[row]):
        print >> r,r1[row][0], r1[row][1], 'equal to 15'

【讨论】:

    【解决方案2】:

    使用 numpy,这很容易:

    [(a < 15).all() for a in r1] 
    

    [(a == 15).all() for a in r1] 
    

    【讨论】:

      【解决方案3】:
      import numpy as np
      
      r1 = np.array([[11, 15],
                     [15, 15],
                     [14, 14]])
      
      equal_to_15 = (r1[:,0] == 15) & (r1[:,1] == 15)
      less_than_15 = (r1[:,0] < 15) & (r1[:,1] < 15)
      

      结果:

      >>> equal_to_15
      array([False,  True, False], dtype=bool)
      >>> less_than_15
      array([False, False,  True], dtype=bool)
      

      错误信息:

      当您将数组与整数进行比较时,您会得到一个布尔数组。

      >>> np.array([13, 15]) == 15
      array([False,  True], dtype=bool)
      >>> if _:
      ...     print 'Hi'
      ... 
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
      

      numpy 不会评估整个数组的真实性,但如果我们这样做了:

      >>> if (np.array([13, 15]) == 15).any():
      ...     print 'Hi'
      ... 
      Hi
      

      【讨论】:

        猜你喜欢
        • 2013-05-09
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2017-12-29
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多