数组的基本属性
- 数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推
- 在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量:比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组
所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
ndarray数组的属性:数组属性反映了数组本身固有的信息。
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
一、ndarray数组的形状
首先创建一些数组。
# 创建不同形状的数组
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
分别打印出形状
print(a.shape)
print(b.shape)
print(c.shape)
(2, 3) # 二维数组
(4,) # 一维数组
(2, 2, 3) # 三维数组
如何理解数组的形状?
二维数组:
三维数组:
二、ndarray数组元素的类型
ndarray数组的类型
print(type(score.dtype))
打印结果:
<type 'numpy.dtype'>
dtype是numpy.dtype类型,先看看对于数组来说都有哪些类型
print(type(score.dtype))
打印结果:
<type 'numpy.dtype'>
dtype是numpy.dtype类型,先看看对于数组来说都有哪些类型
名称 | 描述 | 简写 |
---|---|---|
np.bool | 用一个字节存储的布尔类型(True或False) | ‘b’ |
np.int8 | 一个字节大小,-128 至 127 | ‘i’ |
np.int16 | 整数,-32768 至 32767 | ‘i2’ |
np.int32 | 整数,-2^31 至 2^32 -1 | ‘i4’ |
np.int64 | 整数,-2^63 至 2^63 - 1 | ‘i8’ |
np.uint8 | 无符号整数,0 至 255 | ‘u’ |
np.uint16 | 无符号整数,0 至 65535 | ‘u2’ |
np.uint32 | 无符号整数,0 至 2^32 - 1 | ‘u4’ |
np.uint64 | 无符号整数,0 至 2^64 - 1 | ‘u8’ |
np.float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 | ‘f2’ |
np.float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 | ‘f4’ |
np.float64 | 双精度浮点数:64位,正负号1位,指数11位,精度52位 | ‘f8’ |
np.complex64 | 复数,分别用两个32位浮点数表示实部和虚部 | ‘c8’ |
np.complex128 | 复数,分别用两个64位浮点数表示实部和虚部 | ‘c16’ |
np.object_ | python对象 | ‘O’ |
np.string_ | 字符串 | ‘S’ |
np.unicode_ | unicode类型 | ‘U’ |
创建数组的时候指定类型
a = np.array([[1, 2, 3],[4, 5, 6]], dtype=np.float32)
print(a.dtype)
打印结果:
dtype('float32')
arr = np.array(['python', 'tensorflow', 'scikit-learn', 'numpy'], dtype = np.string_)
print(arr)
打印结果:
array([b'python', b'tensorflow', b'scikit-learn', b'numpy'], dtype='|S12')
- 注意:若不指定,整数默认int64,小数默认float64
六、案例
import numpy as np
my_arr = np.array([
[1, 2, 3, 4],
[5, 6, 7, 8]
])
# 输出数组,注意数组的格式:中括号,元素之间没有逗号(和列表区分)
print('my_arr = ', my_arr)
# 输出数组维度的个数(轴数),或者说“秩”,维度的数量也称rank
print('my_arr.ndim = ', my_arr.ndim)
# 数组的维度,对于n行m列的数组,shape为(n,m)
print('my_arr.shape = ', my_arr.shape)
# 数组的元素总数,对于n行m列的数组,元素总数为n*m
print('my_arr.size = ', my_arr.size)
# 数组中元素的类型,类似type()(注意了,type()是函数,.dtype是方法)
print('my_arr.dtype = ', my_arr.dtype)
# 数组中每个元素的字节大小,int32l类型字节为4,float64的字节为8
print('my_arr.itemsize = ', my_arr.itemsize)
# 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
print('my_arr.data = ', my_arr.data)
打印结果:
my_arr = [[1 2 3 4]
[5 6 7 8]]
my_arr.ndim = 2
my_arr.shape = (2, 4)
my_arr.size = 8
my_arr.dtype = int32
my_arr.itemsize = 4
my_arr.data = <memory at 0x000001F91406B120>
Process finished with exit code 0