Python3NumPy——ndarray对象
程序员文章站
2022-04-15 17:19:21
Python3NumPy——ndarray对象1.前沿2.创建ndarray对象3.元素类型 Python3NumPy——ndarray对象 1.前沿 推荐导入语法:import numpy as np NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象 2.创建nd ......
Python3NumPy——ndarray对象
1.前沿
- 推荐导入语法:import numpy as np
- NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象
2.创建ndarray对象
- 函数array()传递Python序列创建数组
import numpy as np #导入Numpy库,给出别名为np x1 = np.array([1,2,3,4,5,6]) print('-'*20 + '第EX1个例子' + '-'*20) print('EX1=>传递参数为单列表,创建的1维数组x1为: {}'.format(x1)) print('EX1=>x1的形状为元组类型: {}'.format(x1.shape)) print('-'*20 + '第EX2个例子' + '-'*20) x2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print('EX2=>传递参数为嵌套列表,创建的2维数组x2为: \n{}'.format(x2)) print('EX2=>x2的形状为元组类型: {}'.format(x2.shape)) print('-'*20 + '第EX3个例子' + '-'*20) x3 = np.array((7,8,9,10)) print('EX3=>传递参数为单元组,创建的1维数组x3为: {}'.format(x3)) print('EX3=>x3的形状为元组类型: {}'.format(x3.shape)) print('-'*20 + 'End' + '-'*20)
--------------------第EX1个例子-------------------- EX1=>传递参数为单列表,创建的1维数组x1为: [1 2 3 4 5 6] EX1=>x1的形状为元组类型: (6,) --------------------第EX2个例子-------------------- EX2=>传递参数为嵌套列表,创建的2维数组x2为: [[1 2 3] [4 5 6] [7 8 9]] EX2=>x2的形状为元组类型: (3, 3) --------------------第EX3个例子-------------------- EX3=>传递参数为单元组,创建的1维数组x3为: [ 7 8 9 10] EX3=>x3的形状为元组类型: (4,) --------------------End--------------------
Note:补充知识=》修改数组形状,修改后的形状后,其元素在内存中的位置并未改变;只是改变了轴的长度。
X = np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])#X传递参数为嵌套列表,创建的2维 print('原型状数组X为(3行,4列): \n{}'.format(X)) print('X的形状为元组类型(0轴长度为3,1轴为4): {}'.format(X.shape)) print('-'*20 + '第一次修改X的形状' + '-'*20) X.shape = 4, 3 print('第一次修改形状后数组X为(4行,3列): \n{}'.format(X)) print('-'*20 + '第二次修改X的形状' + '-'*20) X.shape = 2, -1 # -1表示自动计算1轴的长度,结果为6 print('第二次修改形状后数组X为(2行,6列): \n{}'.format(X)) print('='*50) print('-'*20 + '指定形状数组:reshape()方法' + '-'*20) a = np.array([1,2,3,4,5,6,7,8,9]) print('原型状数组a为(1行,9列): \n{}'.format(a)) a1 = a.reshape((3,3)) print('变换为3X3数组a1为(3行,3列): \n{}'.format(a1)) print('再次打印a数组为: \n{}'.format(a)) a[0] = 100 print('修改a的第一个元素的值为100后a为: \n{}'.format(a)) print('修改a的第一个元素的值为100后a1为: \n{}'.format(a1)) print('表明:a和a1共享存储空间')
原型状数组X为(3行,4列): [[ 1 2 3 4] [ 5 6 7 8] [ 7 8 9 10]] X的形状为元组类型(0轴长度为3,1轴为4): (3, 4) --------------------第一次修改X的形状-------------------- 第一次修改形状后数组X为(4行,3列): [[ 1 2 3] [ 4 5 6] [ 7 8 7] [ 8 9 10]] --------------------第二次修改X的形状-------------------- 第二次修改形状后数组X为(2行,6列): [[ 1 2 3 4 5 6] [ 7 8 7 8 9 10]] ================================================== --------------------指定形状数组:reshape()方法-------------------- 原型状数组a为(1行,9列): [1 2 3 4 5 6 7 8 9] 变换为3X3数组a1为(3行,3列): [[1 2 3] [4 5 6] [7 8 9]] 再次打印a数组为: [1 2 3 4 5 6 7 8 9] 修改a的第一个元素的值为100后a为: [100 2 3 4 5 6 7 8 9] 修改a的第一个元素的值为100后a1为: [[100 2 3] [ 4 5 6] [ 7 8 9]] 表明:a和a1共享存储空间
3.元素类型
- 采用dtype属性获取
- 创建ndarray对象时,可以指定元素类型
- 元素数据类型转换方法:astype()
xi = np.array([1,2,3,4],dtype=np.int32) #指定整形 print('xi的类型为: {}'.format(xi.dtype)) print('-'*20 + 'End' + '-'*20) xf = np.array([1,2,3,4],dtype=np.float) #指定浮点型 print('xf的类型为: {}'.format(xf.dtype)) print('-'*20 + 'End' + '-'*20) xc = np.array([1,2,3,4],dtype=np.complex) #指定为复数型 print('xc的类型为: {}'.format(xc.dtype)) print('-'*20 + 'End' + '-'*20)
xi的类型为: int32 --------------------End-------------------- xf的类型为: float64 --------------------End-------------------- xc的类型为: complex128 --------------------End--------------------
print("numpy中去重的数据类型:") set(np.typeDict.values())
numpy中去重的数据类型: {numpy.uint16, numpy.complex64, numpy.complex128, numpy.timedelta64, numpy.int32, numpy.uint8, numpy.float64, numpy.void, numpy.int64, numpy.uint32, numpy.object_, numpy.int8, numpy.int32, numpy.uint64, numpy.int16, numpy.uint32, numpy.str_, numpy.datetime64, numpy.float32, numpy.bool_, numpy.float64, numpy.complex128, numpy.float16, numpy.bytes_}
print('xi.dtype的为: {}'.format(xi.dtype)) print('xi.dtype.type的为: {}'.format(xi.dtype.type))
xi.dtype的为: int32 xi.dtype.type的为: <class 'numpy.int32'>
print('-'*20 + '数据类型导致的溢出问题' + '-'*20) xi16 = np.int16(200) print('xi16 X xi16的结果溢出,计算出现错误: {}'.format(xi16*xi16))
--------------------数据类型导致的溢出问题-------------------- xi16 X xi16的结果溢出,计算出现错误: -25536 C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:3: RuntimeWarning: overflow encountered in short_scalars app.launch_new_instance()
NumPy的数值对象的运算速度比Python的内置类型的运算速度慢很多,如果程序中需要大量地单个数值运算,避免使用NumPy的数值对象。
print('-'*20 + '数据类型导致的时间问题' + '-'*20) v1 = 3.14 v2 = np.float64(v1) %timeit v1*v1 %timeit v2*v2
--------------------数据类型导致的时间问题-------------------- 10000000 loops, best of 3: 46.6 ns per loop The slowest run took 35.90 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 129 ns per loop
t1 = np.array((1,2,3,4,5), dtype=np.float) print('转换数据类型为int32') t11 = t1.astype(np.int32) print(t11) print('-'*40) t2 = np.array((1,2,3,4), dtype=np.complex) print('转换数据类型为complex64') t22 = t2.astype(np.complex64) print(t22)
转换数据类型为int32 [1 2 3 4 5] ---------------------------------------- 转换数据类型为complex64 [1.+0.j 2.+0.j 3.+0.j 4.+0.j]
上一篇: idea常用快捷键
下一篇: 行为型模式:中介者模式