Распечатка порядка приоритета булевых операторов на Java

Используйте strides , затем получите разницу с numpy.diff , сравните и последний проверите все True s на строку numpy.all :

N = 4
x = np.concatenate([[np.nan] * (N-1), df['rainfall'].values])

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
arr = rolling_window(x, N)
print (arr)
[[ nan  nan  nan  3.1]
 [ nan  nan  3.1  2. ]
 [ nan  3.1  2.   0. ]
 [ 3.1  2.   0.   0. ]
 [ 2.   0.   0.  12. ]
 [ 0.   0.  12.   0. ]
 [ 0.  12.   0.   1. ]
 [12.   0.   1.   2. ]
 [ 0.   1.   2.   3. ]
 [ 1.   2.   3.   6. ]
 [ 2.   3.   6.   1. ]
 [ 3.   6.   1.   2. ]
 [ 6.   1.   2.   9. ]]

df['flag'] = (np.diff(arr, axis=1) > 0).all(axis=1)
print (df)
    rainfall   flag
0        3.1  False
1        2.0  False
2        0.0  False
3        0.0  False
4       12.0  False
5        0.0  False
6        1.0  False
7        2.0  False
8        3.0   True
9        6.0   True
10       1.0  False
11       2.0  False
12       9.0  False

-1
задан EJoshuaS 20 January 2019 в 06:17
поделиться

2 ответа

Чтобы получить представление, вы можете увидеть таблицу ниже. Он показывает все операторы Java с наивысшего приоритета, а также их ассоциативность

enter image description here

. Взятые из здесь [ 116]

Итак, как вы можете видеть в соответствии с этим, оба результата будут true

0
ответ дан Sand 20 January 2019 в 06:17
поделиться

Приоритет оператора - это просто порядок, в котором применяются операции. Например, рассмотрим следующее математическое утверждение:

10 + 6 / 2

Ну, (10 + 6) / 2 = 16 / 2 = 8, но 10 + (6 / 2) = 10 + 3 = 13, так что ясно, в каком порядке вы выполняете операции. Математически, какой из этих ответов является правильным ? Если вам задали этот вопрос на экзамене, какой ответ вы должны записать? Приоритет оператора говорит вам об этом.

Вопрос просит вас сделать нечто подобное для булевых операторов.

Попробуйте следующую программу:

public class HelloWorld {

     public static void main(String []args){
        System.out.println(true || true && false);

        System.out.println(true && true || false);
     }
}

Оказывается, что оба они true.

Чтобы узнать больше об этом, вы можете поэкспериментировать с круглыми скобками, чтобы увидеть, как это меняет истинное значение утверждений. Например,

System.out.println((true || true) && false);

- это false. Сравните это с тем, что

System.out.println(true || true && false);

есть true. Что это говорит вам о порядке, в котором Java выполняет операции? Ну, то, как я написал скобку, изменило результат, так что ясно, что это неправильно. Из этого можно сделать вывод, что Java должна использовать круглые скобки «по-другому»:

System.out.println(true || (true && false));

Если вы проверите диаграмму в ответе @ Sand, &&, на самом деле, имеет более высокий приоритет, чем [ 1111], поэтому эта операция применяется первой. Это именно то, что мы видим здесь.

0
ответ дан EJoshuaS 20 January 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: