一、数组属性
- 维度:.ndim,返回当前数组维度
- 类型:.dtype,返回数组内元素的数据类型,注:numpy定义的数组数据类型是统一,不能多类型混合
- 形状:.shape,返回数据形状,数组每层中的元素个数
- 元素总数:.size,返回数组中元素总个数
- 字节大小:.itemsize,返回数组中每个元素的字节大小。
import numpy as np
a=np.full((2,5,4),10)
print("数组a:",a)
print("数组a中元素总数:",a.size)
print("数组a的形状:",a.shape)
print("数组a中的元素类型:",a.dtype)
print("数组a的维度:",a.ndim)
print("数组a中的元素字节大小:",a.itemsize)
>>>
数组a: [[[10 10 10 10]
[10 10 10 10]
[10 10 10 10]
[10 10 10 10]
[10 10 10 10]]
[[10 10 10 10]
[10 10 10 10]
[10 10 10 10]
[10 10 10 10]
[10 10 10 10]]]
数组a中元素总数: 40
数组a的形状: (2, 5, 4)
数组a中的元素类型: int32
数组a的维度: 3
数组a中的元素字节大小: 4
二、数据类型
- 不指定的情况下,numpy会自动推断出适合的数据类型,所以一般不需要显示给定数据类型。
- 数值型dtype的命名方式为:一个类型名称(eg:int、float等),后接一个表示各个元素位长的数字
- 如Python的float数据类型(双精度浮点值),需要占用8个字节(64位),因此在NumPy中记为float64
- 每个数据类型都有一个类型代码,即简写方式
| 数据类型 | 简写 | 说明 | 字节 | 范围 | |
| 整型 | int_ | 默认整形 | |||
| intc | 等价于long的整形 | ||||
| int8 | i1 | 字节整形 | 1 | [-128,127] | |
| int16 | i2 | 整形 | 2 | [-32768,32767] | |
| int32 | i3 | 整形 | 4 | [-2^31, 2^31-1] | |
| int64 | i4 | 整形 | 6 | [-2^63, 2^63-1] | |
| 无符号 整型 |
uint8 | u1 | 无符号整形 | 1 | [0,255] |
| uint16 | u2 | 无符号整形 | 2 | [0,65535] | |
| uint32 | u3 | 无符号整形 | 1 | [0, 2^32-1] | |
| uint64 | u4 | 无符号整形 | 1 | [0,2^64-1] | |
| 布尔 | bool_ | 布尔值 | 1 | True或者False | |
| 浮点型 | float_ | float64简写形式 | 8 | ||
| float16 | f2 | 半精度浮点型 | 2 | 1符号位+5位指数+10位的小数部分 | |
| float32 | f4或者f | 单精度浮点型 | 4 | 1符号位+8位指数+23位的小数部分 | |
| float64 | f8或者d | 双精度浮点型 | 8 | 1符号位+11位指数+52位的小数部分 | |
| 复数 | complex_ | c16 | complex128的简写形式 | ||
| complex64 | c8 | 复数,由两个32位的浮点数来表示 | 32 | ||
| complex128 | c16 | 复数,由两个64位的浮点数来表示 | 64 | ||
| 对象 | object | O | Python对象类型 | ||
| 字符串 | String_ | S | 固定长度的字符串类型(每个字符1个字节) | ||
| Unicode_ | U | 固定长度的unicode类型的字符串 | |||
三、数组修改(属性)
- 形状修改:.reshape()、.T
- 维度修改:.reshape()
- 类型修改:.astype()
3.1、reshape()方法:修改数组形状与维度
- 直接修改数组ndarray的shape值,要求修改后乘积不变。
- 直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致。
- 当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值。
import numpy as np
a=np.arange(30)
print("原数组(一维):",a)
b=a.reshape(2,3,5)
print("新数组(三维):",b)
b[1][2][2]=666
print("修改b中的数值会影响到a:",a)
print("对b使用降维打击:",b.reshape(10,-1))
>>>
原数组(一维):
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]
新数组(三维):
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]]
修改b中的数值会影响到a:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26 666 28 29]
对b使用降维打击:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[ 12 13 14]
[ 15 16 17]
[ 18 19 20]
[ 21 22 23]
[ 24 25 26]
[666 28 29]]
3.2、T方法:行列转置
- 使用T方法以后,可以对数组进行行列转置。
import numpy as np a=np.random.randint(1,10,size=(2,3,4)) b=a.T print(b.shape) >>> (4, 3, 2)
3.2、astype()方法:修改元素类型
- 如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组。
import numpy as np
a=np.arange(1,5)
print("原数组:{0},其数据类型为:{1}".format(a,a.dtype))
b=a.astype(float)
print("新数组:{0},其数据类型为:{1}".format(b,b.dtype))
>>>
原数组:[1 2 3 4],其数据类型为:int32
新数组:[1. 2. 3. 4.],其数据类型为:float64