У меня есть два списка в Python:
a = [1, 5, 5]
b = [2, 10, 8]
Если 1 < 2
и 5 < 10
и 5 < 8
, то есть если каждый элемент списка a
меньше соответствующего ему элемента списка b
, то переменная c
будет равна 1
; если это не 0
сработает
Я пытался сделать это с помощью, numpy.where
но затем я не могу найти функцию, которая говорит, является ли результирующий вектор пустым или нет (эквивалент isempty
Matlab)
Это то, что я пробовал до сих пор:
a = [10, 10, 10]
b = [1, 1, 1]
a = np.asarray(a)
b = np.asarray(b)
if np.where(abs(a) / 5 < abs(b)): residual_check = 1
else: residual_check = 0
print(residual_check)
Как я мог это сделать?
Вы можете напрямую сравнить оба массива и использовать
numpy.any
, чтобы увидеть, есть ли какое-либо сравнениеTrue
илиnumpy.all
хотите ли вы, чтобы все они былиTrue
:Вы также можете использовать стандартный Python через
any
/all
иzip
:Если вы хотите, чтобы это
c
было 0/1, а неTrue
/False
, вам просто нужно разыграть:При использовании он
all
вернетTrue
(1), если все элементыa
меньше, чем соответствующиеb
. Если он используется, онany
вернетсяTrue
, если хотя бы один элемент относится к его партнеру.Вы можете использовать функцию numpy.less для сравнения списков поэлементно, таким образом получая массив с логическими значениями, а затем проверять, все ли элементы верны, используя функцию numpy.all :
Если вы хотите работать с «чистым» python без какой-либо библиотеки, вариант — это код, подобный следующему:
Оператор zip позволяет перебирать каждый список, возвращая по одному элементу каждого списка за раз на каждой итерации. Если вы предпочитаете не использовать zip, потому что считаете его запутанным, это будет что-то вроде:
Чтобы получить
1
o0
вместоTrue
oFalse
, вы можете напрямую изменить функцию, «привести» к целому числупроверить функцию
numpy.array_equal(array1, array2)
Реторы
True
, если они одинаковые....False
если нет.