为什么numpy.asarray返回一个充满布尔值的数组

时间:2018-06-12 16:48:36

标签: python numpy types numpy-dtype

如果我希望根据图像中的像素值填充数组01,我会写下:

image = "example.jpg"
imageOpen = Image.open(image)
bwImage = imageOpen.convert("1", dither=Image.NONE)
bw_np = numpy.asarray(bwImage)
print(type(bw_np[0, 0]))

结果:

<class 'numpy.bool_'>

由于.convert双层模式"1",数组必须充满10https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.convert

当我尝试更简单的事情时:

bw_np = numpy.asarray([0, 1])
print(type(bw_np[0]))

结果:

<class 'numpy.int32'>

但不是第二个例子,第一个例子是truefalse。 那么为什么?

1 个答案:

答案 0 :(得分:1)

简而言之:在python True1False0。这应该纠正这种奇怪的行为:

bw_np = numpy.asarray(bwImage, dtype=int)

答案很长:为了更好的内存管理,也许imageOpen.convert("1", dither=Image.NONE)更喜欢bool而不是int32:

import sys
import numpy

print("Size of numpy.bool_() :", sys.getsizeof(numpy.bool_()))
print("Size of numpy.int32() :", sys.getsizeof(numpy.int32()))

结果:

Size of numpy.bool_() : 13
Size of numpy.int32() : 16