如何在ulab micropython numpy中获取元素明智的逻辑和

fumotvh3  于 2023-08-05  发布在  Python
关注(0)|答案(1)|浏览(140)

我在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'

字符串

368yc8dk

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,取决于拱)。而True1的别名(如果您使用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中:

from ulab import numpy as np
arr1 = np.array([True, False, True], dtype=np.bool)
arr2 = np.array([False, True, True], dtype=np.bool)

print(arr1 and arr2) # returns [False,True,True], that is arr2, which has its logics: `arr1`
print(arr1 & arr2) # array([False, False, True], dtype=bool). So what you want
np.logical_and(arr1, arr2) # AttributeError: 'module' object has no attribute 'logical_and'. That doesn't change

字符串
所以逻辑&工作,一旦你确保数组有bool dtype。
请注意,您必须使用np.bool,而不是bool(与常规numpy相反,如果您使用np.bool,它会给出弃用警告,并且不仅适用于bool,而且鼓励使用bool

相关问题