NumPy数组
NumPy中的核心对象是以ndarray为类型的数组。数组中通常存放相同数值类型的对象。数组的维度通常叫做轴(axis)。
数组的常用属性
ndarray.ndim
ndarray.shape
数组对象的尺寸,是由每个维度上的元素个数构成的元组。如果一个数组有m行n列,那它的尺寸就是(m, n)。
ndarray.size
ndarray.dtype
数组元素的存储类型,具体有哪些类型可以参考 这里。
ndarray.itemsiz
数组中元素占用的字节数,具体和数组元素的存储类型有关。
import numpy as npa = np.array([1, 2], dtype=np.int8)b = np.array([1, 2], dtype=np.int16)pirnt(a.itemsize, b.itemsize) # 1 2
举个例子
import numpy as npa = np.arange(15).reshape(3, 5)print(type(a)) # <class 'numpy.ndarray'>print(a.shape) # (3, 5)print(a.dtype) # dtype('int32')print(a.itemsize) # 4print(a.size) # 15print(repr(a)) # 重写了__repr__()魔法函数,结果如下# array([[ 0, 1, 2, 3, 4],# [ 5, 6, 7, 8, 9],# [10, 11, 12, 13, 14]])print(a) # 重写了__str__()魔法函数,结果如下# [[ 0 1 2 3 4]# [ 5 6 7 8 9]# [10 11 12 13 14]]
补充:0维数组
在使用numpy.array()构建数组对象时,通常会传入列表作为参数,其实,如果我们传入一个常数作为参数,也能够构建出数组对象,此时的数组,其维度是 0。
import numpy as npa = np.array(666)print(type(a)) # <class 'numpy.ndarray'>print(repr(a)) # array(666)print(a.ndim) # 0print(a.shape) # ()
现在就比较尴尬了,其他维度的数组,我们可以通过索引来访问其中的元素值,但是零维数组,连维度都没有,哪里来的索引呢?更别说修改数组元素的值了。但是,Python里还真有称得上是「竟然还有这种操作」的操作。
# 修改零维数组的值a[...] = 777print(a) # 777
...具体起到了什么作用可以参考这个回答:What does the Python Ellipsis object do?
在后面多维数组遍历的时候,还会碰到这个问题,先做个铺垫。
