博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---27、numpy(2)

Posted on 2020-02-23 10:05  兰智杰  阅读(201)  评论(0编辑  收藏  举报

ndarray对象属性

  ndim 数组轴(维度)的个数,轴的个数被称作秩

import numpy as np
a = np.arange(24)
print(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]
print(a.ndim)   #输出为 1
b = a.reshape(2,4,3)
print(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]]]
print(b.ndim)   #输出为 3
print(b.shape)  #输出为 (2, 4, 3)

  shape 数组的维度,例如一个2排3列的矩阵,它的shape属性将是(2,3)这个元组的长度显然是秩,即维度或者ndim属性;对于一个已经存在的ndarray数组对象而言,可以通过修改形状相关的参数/方法从而改变数组的形状,直接修改数组ndarray的shape值,,要求修改后乘积不变,直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致,当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值

'''
输出为 [[1 2 3]
        [4 5 6]]
      (2, 3)
      [[1 2]
       [3 4]
       [5 6]]
'''
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a)
print(a.shape)
#调整数组大小
a = np.array([[1,2,3],[4,5,6]])
a.shape=(1,6)   #输出为 [[1 2 3 4 5 6]]
print(a)
# reshape 调整数组大小
b = a.reshape(3,2)
print(b)        #输出为  [[1 2]
#                        [3 4]
#                        [5 6]]

  size 数组元素的总个数,等于shape属性中元组元素的乘积

import numpy as np
arr = np.arange(18).reshape(2,3,3)
print(type(str(arr)))           #输出为 <class 'str'>
print(arr.shape)                #输出为 (2, 3, 3)
print(arr.size)                 #输出为 18

  itemsize 数组中每个元素的字节大小,例如一个元素类型为float64的数组itemsize属性值为8(=64/8),又如一个元素类型为complex32的数组item属性为4(=32/8)

import numpy as np
#数组的int8 1个字节
x = np.array([1,2,3,4,5], dtype = np.int8)
print(x.itemsize)                       #输出为 1
#数组的float32 4个字节
x = np.array([1,2,3,4,5], dtype = np.float32)
print(x.itemsize)                       #输出为 4

  dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型,不过NumPy提供它自己的数据类型;创建numpy数组的时候可以通过属性dtype显示指定数据类型,如果不指定的情况下,numpy会自动推断出适合的数据类型,所以一般不需要显示给定数据类型,如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组

import numpy as np
arr=np.random.randint(1,6,size=(1,3))
print(arr)                  #输出为 [[5 3 1]]
arr=arr.astype(float)
print(arr)                  #输出为 [[5. 3. 1.]]

  

  

import numpy as np
#使用数组标量类型
dt = np.dtype(np.int32)
print(dt)                   #输出为 int32
#int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他
dt = np.dtype('i4')
print(dt)                   #输出为 int32
import numpy as np
dt = np.dtype([('age',np.int8)])
print(dt)                       #输出为 [('age', 'i1')]
#将结构化数据应用于ndarray对象
a = np.array([(10,),(20,),(30,)],dtype = dt)
print(a)                        #输出为 [(10,) (20,) (30,)]
#访问age列内容
dt = np.dtype([('age','i1')])
a = np.array([(10,),(20,),(30,)],dtype = dt)
print(a['age'])                #输出为 [10 20 30]
#结构化数据包含多个字段
student = np.dtype([('name','S20'),('age','i1'),('marks','f4')])
a = np.array([('joe',20,80),('susan',22,85),('tom',23,90),('fank',23,33)],dtype=student)
print(a)                  #输出为 [(b'joe', 20, 80.) (b'susan', 22, 85.) (b'tom', 23, 90.) (b'fank', 23, 33.)]
print(a['name'])         #输出为 [b'joe' b'susan' b'tom' b'fank']

  每个数据类型都有一个类型代码,即简写方式