二、Numpy基础:数组修改

一、数组属性

  • 维度:.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

 

posted @ 2018-01-13 16:18  小小逐月者  阅读(6288)  评论(1编辑  收藏  举报