numpy数组的类型强制如何工作?

时间:2017-11-16 04:16:23

标签: python arrays numpy

Numpy导入为np

np.array([True, 1, 2]) + np.array([3, 4, False])

结果是:

array([4, 5, 2])

在此示例中,boolean已更改为int。我认为这是因为操作。

np.array([True,1,2])

结果是:

array(1,1,2)

使用string似乎优先考虑并将int更改为string

np.array(["True", 1, 2])

结果

array(['True', '1', '2'], dtype='<U4')

in [4]: np.array([0, 1, 2, 3, 'a', True])
Out[4]: 
array(['0', '1', '2', '3', 'a', 'True'], dtype='<U21')`

现在似乎string具有最高优先级,而不是特定类型的对象数。为什么返回dtype='<U4'/'U1'

这究竟是如何运作的?

我是否可以使用此属性将非零整数更改为True并将零更改为False或者我必须使用比较运算符?

1 个答案:

答案 0 :(得分:0)

答案部分包含在您的问题中。 Boolean类型具有隐式转换为其他数字类型,因为它只是0或1,允许例如带掩码的算术运算。数字也可以轻松转换为字符,为您提供字符串。但另一方面,将str值分配给int并不能直接开箱即用。这就是为什么当您向数组添加字符串时,它会立即推广到str类型。当使用dtype时,它返回U#,其中#由字符串数组的长度决定,据我所知,请参阅官方文档here。 从数字数组到bool的转换完全按照您的指定工作,如果元素非零,则返回True,否则为False。例如:

a=np.array([0.0,1.5,0,1e8,-3])

for b in a:
    if b: print ("hi there")
    else: print ("go away!")

有效a值被视为[False,True,False,True,True]