NumPy数组

NumPy中的核心对象是以ndarray为类型的数组。数组中通常存放相同数值类型的对象。数组的维度通常叫做轴(axis)

数组的常用属性

ndarray.ndim

数组对象的维度(轴)数量

ndarray.shape

数组对象的尺寸,是由每个维度上的元素个数构成的元组。如果一个数组有mn列,那它的尺寸就是(m, n)

ndarray.size

数组中所有元素的数量,等于shape元组中各元素乘积。

ndarray.dtype

数组元素的存储类型,具体有哪些类型可以参考 这里

ndarray.itemsiz

数组中元素占用的字节数,具体和数组元素的存储类型有关。

  1. import numpy as np
  2. a = np.array([1, 2], dtype=np.int8)
  3. b = np.array([1, 2], dtype=np.int16)
  4. pirnt(a.itemsize, b.itemsize) # 1 2

举个例子

  1. import numpy as np
  2. a = np.arange(15).reshape(3, 5)
  3. print(type(a)) # <class 'numpy.ndarray'>
  4. print(a.shape) # (3, 5)
  5. print(a.dtype) # dtype('int32')
  6. print(a.itemsize) # 4
  7. print(a.size) # 15
  8. print(repr(a)) # 重写了__repr__()魔法函数,结果如下
  9. # array([[ 0, 1, 2, 3, 4],
  10. # [ 5, 6, 7, 8, 9],
  11. # [10, 11, 12, 13, 14]])
  12. print(a) # 重写了__str__()魔法函数,结果如下
  13. # [[ 0 1 2 3 4]
  14. # [ 5 6 7 8 9]
  15. # [10 11 12 13 14]]

补充:0维数组

在使用numpy.array()构建数组对象时,通常会传入列表作为参数,其实,如果我们传入一个常数作为参数,也能够构建出数组对象,此时的数组,其维度是 0。

  1. import numpy as np
  2. a = np.array(666)
  3. print(type(a)) # <class 'numpy.ndarray'>
  4. print(repr(a)) # array(666)
  5. print(a.ndim) # 0
  6. print(a.shape) # ()

现在就比较尴尬了,其他维度的数组,我们可以通过索引来访问其中的元素值,但是零维数组,连维度都没有,哪里来的索引呢?更别说修改数组元素的值了。但是,Python里还真有称得上是「竟然还有这种操作」的操作。

  1. # 修改零维数组的值
  2. a[...] = 777
  3. print(a) # 777

...具体起到了什么作用可以参考这个回答:What does the Python Ellipsis object do?

在后面多维数组遍历的时候,还会碰到这个问题,先做个铺垫。