如何获取Python中多维Numpy数组元素的类型

21 投票
2 回答
51541 浏览
提问于 2025-04-17 22:08

我怎么能获取一个多维数组的类型呢?

我在处理数组时,需要考虑数据的类型,比如:字符串浮点数布尔值,所以我需要调整代码,以便不管数组的维度是几维(可能是一维、二维或更多),我都能获取到类型。

数据可以是一维的真实数,或者是三维的字符串……

我想知道数组的类型,它是一个真实数、一个字符串,还是一个布尔值……

而不想通过像 Array[0] 或 Array[0][0][0][0] 这样的方式来获取,因为维度可能会不同。或者有没有办法获取数组的第一个元素,无论它的维度是多少。

我用稍微修改过的 np.isreal 可以做到这一点,但我找不到类似 isastring 或 isaboolean 的等效方法……

2 个回答

0
fruits = [['banana'], [1],  [11.12]]

for first_array in range(len(fruits)):
    for second_array in range(len(fruits[first_array])):
        print('Type :', type(fruits[first_array][second_array]), 'data:', fruits[first_array][second_array])

这段代码展示了每个值的数据类型。

27

使用 dtype 属性:

>>> import numpy
>>> ar = numpy.array(range(10))
>>> ar.dtype
dtype('int32')

解释

Python 的列表就像数组:

>>> [[1, 2], [3, 4]]
[[1, 2], [3, 4]]

但是在分析和科学计算中,我们通常使用 numpy 这个库的数组,因为它能进行高效的计算:

>>> import numpy as np
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
       [3, 4]])

如果你想查看数组中数据的类型,我们可以通过数组中感兴趣的元素的索引来做到这一点(这里我会逐层深入,直到找到最深的元素):

>>> ar = np.array([[1, 2], [3, 4]])
>>> type(ar)
<type 'numpy.ndarray'>
>>> type(ar[0])
<type 'numpy.ndarray'>
>>> type(ar[0][0])
<type 'numpy.int32'>

我们也可以直接通过访问 dtype 属性来检查数据类型

>>> ar.dtype
dtype('int32')

例如,如果数组是字符串,我们可以知道最长的字符串有多长:

>>> ar = numpy.array([['apple', 'b'],['c', 'd']])
>>> ar
array([['apple', 'b'],
       ['c', 'd']], 
      dtype='|S5')
>>> ar = numpy.array([['apple', 'banana'],['c', 'd']])
>>> ar
array([['apple', 'banana'],
       ['c', 'd']], 
      dtype='|S6')
>>> ar.dtype
dtype('S6')

我一般不为我的导入设置别名,这样可以保持一致性(我通常会写 import numpy)。

>>> ar.dtype.type
<type 'numpy.string_'>
>>> ar.dtype.type == numpy.string_
True

但通常会使用 import numpy as np 来给它设置一个别名:

>>> import numpy as np
>>> ar.dtype.type == np.string_
True

撰写回答