第八周——数据分析、可视化 Day1 8.15

学习时间:9:00——11:00      14:00——16:00

#之前提到过数组集合中的元素类型必须相同
import numpy as np
np.array([1,1.5,3,4.5,'5'])

#输出结果:array(['1', '1.5', '3', '4.5', '5'], dtype='<U32')
#因为字符串的存储方式最大,所以把整型和浮点型数据转化为字符型

1. 数据类型优先级:字符型>浮点型>整型

np.array([[1,2,3],('a','b','c')])

#array([['1', '2', '3'],
#      ['a', 'b', 'c']], dtype='<U11')

2. 元组转化为列表,并且由于每个列表中元素个数统一,是个二维列表

np.array([[1,2,3],('a','b','c','d')])

'''
输出结果:C:\Users\86175\AppData\Local\Temp\ipykernel_5356\1745911631.py:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  np.array([[1,2,3],('a','b','c','d')])
array([list([1, 2, 3]), ('a', 'b', 'c', 'd')], dtype=object)
'''

嵌套序列数量不一致,会有红字提示,仍为一维列表,用ndim函数和shape函数验证:

ar1 = np.array([[1,2,3],('a','b','c','d')])
ar1.ndim

#1         

ar1 = np.array([[1,2,3],('a','b','c','d')])
ar1.shape

#(2,)

验证成功,是一行两列的一维数组

3. array的参数:dtype

dtype就是标明前面的数据类型,可以用于数据类型的强制转换


np.array([1,2,3.5,4],dtype='float')

#array([1. , 2. , 3.5, 4. ])

整型转换为浮点型会在数字后面加.       

np.array([1,2.5,3.8,4,5],dtype='int' )

#array([1, 2, 3, 4, 5])

浮点型转换为整型不会四舍五入,直接取整

4. array的参数:copy,默认设为True

a= np.array([1,2,3,4])
b = np.array(a)
print('a和b的内存地址分别为a:',id(a),' b:',id(b))

#a和b的内存地址分别为a: 2288714096432  b: 2288714096528

b[0] = 10
print('a:',a,' b:',b)

#a: [1 2 3 4]  b: [10  2  3  4]

对b的修改不会影响a,但是如果把b = np.array(a)改成b = a,那么对b的修改会影响a

a= np.array([1,2,3,4])
b = a                             #直接等于,是试图操作,相当于列表的引用赋值
print('a和b的内存地址分别为a:',id(a),' b:',id(b))

#a和b的内存地址分别为a: 2288714095184  b: 2288714095184

b[0] = 10
print('a:',a,' b:',b)

#a: [10  2  3  4]  b: [10  2  3  4]

由此可以看出在python中,变量最好理解为标签而不是盒子!在处理大量数据的时候,赋值操作不会开辟新的内存地址,减少资源的浪费

a= np.array([1,2,3,4])
b = np.array(a,copy=False)       #当copy参数为False时,不会创建副本,两个变量指向相同的地址
print('a和b的内存地址分别为a:',id(a),' b:',id(b))
b[0]=10
print('a:',a,' b:',b)

#a和b的内存地址分别为a: 2288679574768  b: 2288679574768
#a: [10  2  3  4]  b: [10  2  3  4]

5. array的参数:ndmin(用于指定数组的维度)

a = np.array([1,2,3],ndmin=2)
print(a)
print(a.ndim)

#[[1 2 3]]
#2

6. array的参数:subok(类型为bool值,默认为False,为True,使用object的内部数据类型;为False,使用数组的数据类型)

a= np.mat([1,2,3,4])
print(type(a))

at = np.array(a,subok=True)
af = np.array(a)

print('at,subok=True:',type(at))
print('af,subok=False:',type(at))
print(id(at),id(af))

#<class 'numpy.matrix'>
#at,subok=True: <class 'numpy.matrix'>
#af,subok=False: <class 'numpy.matrix'>
#2288714132048 2288714095184

7. arange()生成区间数组

numpy.arange(start,stop,step,dtype)

import numpy as np
print(np.arange(10))
print(np.arange(3.1))        #range(3.1)错误,不能解析浮点型数据


#[0 1 2 3 4 5 6 7 8 9]
#[0. 1. 2. 3.]
np.arange(0,20,3)                  #0不能省略,虽然起始值默认为0
np.arange(20,step=3)               #如果只想写两个参数的话,要指定传参

#array([ 0,  3,  6,  9, 12, 15, 18])

如果数据范围太大,只会显示首末几个数字 

8. linspace()创建等差数组

np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

PS:默认包括终止值(左闭右闭),如果不想包含则把endpoint改为False

         num是指分成多少项,默认为50 

         retstep默认为False,设置成Ture后先是步长,显示步长后输出结果为元组

等差数列的作用:在线性回归经常作为样本集

9. logspace()创建等比数列

np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)

PS: base是指等比数列的公比,也就是底数,默认为10

       起始值和终止值就是指数幂

np.logspace(1,5,3,base=2)    #先将起始值和终止值根据要分的个数等分,然后利用指数函数输出结果

#array([ 2.,  8., 32.])

 等比数列输出的逻辑相当于先做等差再用指数函数输出,有下面的代码可以看出,a=c

a = np.logspace(1.,2.,num=10)

b = np.linspace(1.,2.,num=10)
c = 10 ** b

print('a:',a,'b:',b,'c:',c)


#a: [ 10.          12.91549665  16.68100537  21.5443469   27.82559402
#  35.93813664  46.41588834  59.94842503  77.42636827 100.        ] 
#b: [1.         1.11111111 1.22222222 1.33333333 1.44444444 1.55555556
# 1.66666667 1.77777778 1.88888889 2.        ] 
#c: [ 10.          12.91549665  16.68100537  21.5443469   27.82559402
#  35.93813664  46.41588834  59.94842503  77.42636827 100.        ]

  10. numpy数组属性

a = np.array([1,2,3,4,5,])
print(a.ndim,a.shape)

b = np.array([[1,2,3],[4,5,6]])
print(b.ndim,b.shape)
              
c = np.array([[[1,2,3],[4,5,6]],[[11,22,33],[44,55,66]]])
print(c.ndim,c.shape)

#1 (5,)
#2 (2, 3)
#3 (2, 2, 3)

a是一个1x5的一维数组,1可以省略,所以显示(5,)

b是一个2x3的二维数组,2行3列

c是一个2x2x3的三维数组,2行2列高3

技巧是括号从外向内看

11. 调整维度: reshape

a = np.arange(20).reshape((4,5))
print(a)

#array([[ 0,  1,  2,  3,  4],
#       [ 5,  6,  7,  8,  9],
#      [10, 11, 12, 13, 14],
#      [15, 16, 17, 18, 19]])

调整维度也可以用np.resize()

PS:如果新数组元素个数大于原始数组(a),则新数组将填充原始数组的重复副本,但此行为与a.resize()不同,后者用0填充而不是重复副本

a = np.array([[1,2],[3,4]])
b = np.resize(a,(2,3))
print('b:',b)

a.resize((2,3))
print('a:',a)

#b: [[1 2 3]
# [4 1 2]]
#a: [[1 2 3]
# [4 0 0]]

12. astype()强制转换数据类型

a = np.array([1.1,1.2])
b = a.astype('int')
print(b.dtype)

#int32

 13. ndarray.itemsize:数组中每个元素的大小

a = np.array([1.1,1.2])
print('dtype:',a.dtype,'itemsize:',a.itemsize)
b = np.array([1,1])
print('dtype:',b.dtype,'itemsize:',b.itemsize)

#dtype: float64 itemsize: 8
#dtype: int32 itemsize: 4

一个元素类型为float64的数组itemsize属性值为8(float64占用64个bits,每个字节长度为8,所以占用8个字节)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值