我在ESP32上使用ulab micropython。我找不到逻辑和操作。我是Micropython的新手。请帮助我如何在两个numpy数组之间进行逻辑与
from ulab import numpy as np
arr1 = np.array([True, False, True])
arr2 = np.array([False, True, True])
print(arr1 and arr2) # gives Incorrect answer array([0.0, 1.0, 1.0], dtype=float32)
print(arr1 & arr2) # gives TypeError: unsupported types for __and__: 'ndarray', 'ndarray'
np.logical_and(arr1, arr2) # AttributeError: 'module' object has no attribute 'logical_and'
字符串
1条答案
按热度按时间368yc8dk1#
您必须显式地将
dtype
指定为bool,否则,您将得到arr1=np.array([1.0,0.0,1.0])
和arr2=np.array([0.0,1.0,1.0])
。Dtype默认为float(64或32,取决于拱)。而
True
是1
的别名(如果您使用np.array([True,False,True], dtype=np.float64)
,则与常规python一样)在这些上面使用按位
&
也会在常规python/numpy上失败。ulab的版本和常规版本之间唯一显著的区别是,当你不指定时,默认的dtype是:在常规python中,如果不指定dtype,则会自动推断为布尔数组。
(same是int,顺便说一句。在常规python中,
np.array([1,2,3])
的dtype为int
,而upython将构建[1.0, 2.0, 3.0]
浮点数组,除非您明确地说np.array([1,2,3], dtype=np.int16)
)在μpython中:
字符串
所以逻辑
&
工作,一旦你确保数组有bool dtype。请注意,您必须使用
np.bool
,而不是bool
(与常规numpy相反,如果您使用np.bool
,它会给出弃用警告,并且不仅适用于bool
,而且鼓励使用bool
)