Numpy数据类型包括:

int8、uint8、int16、uint16、int32、uint32、int64、uint64、float16、float32、float64、float128、complex64、complex128、complex256、bool、object、string_、unicode_

astype

显示转换数组类型的方法

例如:

NumPy数组的索引和切片

索引

和python列表差不多,基本上没啥区别

切片

NumPy数组的切片出来的数值改变,就会改变NumPy数组的源数组的值。NumPy数组的切片是源数组的视图,而不是新复制出来的一个数组。从下面的例子,我们可以看到arr[,]= ,arr的数组变化了,data数组对应位置的数值也变化了。

In []: data = np.random.randn(,)

In []: data
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, 1.42196278, 0.84758994]]) In []: arr = data[:,:] In []: arr
Out[]:
array([[-0.91963212, 3.09214837, -0.6070068 ],
[-1.46576298, 1.42196278, 0.84758994]]) In []: arr = In []: data
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, 1.42196278, 0.84758994]]) In []: arr
Out[]: In []: arr = data[:,:] In []: arr
Out[]:
array([[-0.91963212, 3.09214837, -0.6070068 ],
[-1.46576298, 1.42196278, 0.84758994]]) In []: arr ==
Out[]:
array([[False, False, False],
[False, False, False]], dtype=bool) In []: arr
Out[]:
array([[-0.91963212, 3.09214837, -0.6070068 ],
[-1.46576298, 1.42196278, 0.84758994]]) In []: arr[,]= In []: arr
Out[]:
array([[-0.91963212, 3.09214837, -0.6070068 ],
[-1.46576298, . , 0.84758994]]) In []: data
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, . , 0.84758994]]) In []:

如果要复制NumPy数组的切片,则可以使用显示复制方法copy()

In []: data
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, . , 0.84758994]]) In []: arr = data In []: arr
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, . , 0.84758994]]) In []: arr = np.copy(data) In []: arr
Out[]:
array([[-1.68867271, -0.89369286, -0.0288363 , 0.73855122],
[-0.13084603, 0.43972144, 0.73542583, 1.99925332],
[ 0.04291022, -0.91963212, 3.09214837, -0.6070068 ],
[-0.01416294, -1.46576298, . , 0.84758994]])

布尔类型索引

假设每个字符串对应data数组一行数据。需要注意布尔型数组的长度必须与被索引的轴长度一致。

通过布尔型索引查找数组数值的方式如下:

In [140]: names = np.array(['aaa','bbb','ccc','ddd','eee','fff'])

In [141]: data = np.random.randn(6,4)

In [142]: names
Out[142]:
array(['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'],
       dtype='<U3')

In [143]: data
Out[143]:
array([[ 0.49394026, -0.65887621, -0.26946242,  0.22042355],
        [-1.11606179, -1.94945158, -0.4866134 ,  0.67712409],
        [-2.33792045,  0.01639887, -0.46020647,  0.84180777],
        [-1.99622938,  1.937877  , -0.17134376,  0.56915872],
        [ 1.50980905,  0.07244016, -0.95650922,  1.23508517],
        [ 0.74706519, -0.03149619, -0.38235363,  0.69786257]])

In [144]: names == 'aaa'
Out[144]: array([ True, False, False, False, False, False], dtype=bool)

In [145]: data[names=='aaa']
Out[145]: array([[ 0.49394026, -0.65887621, -0.26946242,  0.22042355]])

In [146]: names =='ccc'
Out[146]: array([False, False,  True, False, False, False], dtype=bool)

In [147]: data[names=='ccc']
Out[147]: array([[-2.33792045,  0.01639887, -0.46020647,  0.84180777]])

布尔数组索引结合切片进行查找数组的数值:

In []: data[names=='aaa',]
Out[]: array([-0.26946242]) In []: data[names=='aaa',:]
Out[]: array([[-0.26946242, 0.22042355]]) In []: data[names=='aaa',:]
Out[]: array([[-0.65887621, -0.26946242, 0.22042355]])

反向查找

In []: names !='aaa'
Out[]: array([False, True, True, True, True, True], dtype=bool) In []: data[names!='aaa']
Out[]:
array([[-1.11606179, -1.94945158, -0.4866134 , 0.67712409],
[-2.33792045, 0.01639887, -0.46020647, 0.84180777],
[-1.99622938, 1.937877 , -0.17134376, 0.56915872],
[ 1.50980905, 0.07244016, -0.95650922, 1.23508517],
[ 0.74706519, -0.03149619, -0.38235363, 0.69786257]])

组合查找

In []: mask = (names == 'aaa')|(names == 'ccc')

In []: mask
Out[]: array([ True, False, True, False, False, False], dtype=bool) In []: data[mask]
Out[]:
array([[ 0.49394026, -0.65887621, -0.26946242, 0.22042355],
[-2.33792045, 0.01639887, -0.46020647, 0.84180777]])

花式索引

其实就是利用整数列表或数组进行索引查找。花式索引与数组切片不同,花式索引会将数据复制到新的数组。

整数列表

创建一个二维数组arr,然后传入[3,1],意思就是按 arr [3,:]、arr[1,:]的顺序显示出来。

In []: arr = np.array(([,,,],[,,,],[,,,],[,,,]))

In []: arr
Out[]:
array([[ , , , ],
[ , , , ],
[ , , , ],
[ , , , ]]) In []: arr[[,]]
Out[]:
array([[ , , , ],
[ , , , ]])

传入多个整数数组

一次传入多个整数数组,返回的是一个一维数组。

数组转置对轴对换

数组转置,是指将原数组A的行与列交换得到的一个新数组。

比如:

的转置是的转置是

方法1:T

In []: arr = np.random.randn()

In []: arr
Out[]:
array([-1.42853867, 1.54300781, -0.74079757, -1.20272388, -1.00416459,
-0.59571731, 1.16744662, 0.05739806, 1.01660691, -0.84625494]) In []: arr.T
Out[]:
array([-1.42853867, 1.54300781, -0.74079757, -1.20272388, -1.00416459,
-0.59571731, 1.16744662, 0.05739806, 1.01660691, -0.84625494]) In []: arr = np.random.randn(,) In []: arr
Out[]:
array([[ 1.36114118, 0.48455027, 0.64847485, 0.01691785, -0.03622465],
[-2.31302164, 1.14992892, -1.47836923, 1.08003907, -1.33663009],
[-0.38005499, 1.3517217 , 2.52024026, -0.3576492 , 0.46016645]]) In []: arr.T
Out[]:
array([[ 1.36114118, -2.31302164, -0.38005499],
[ 0.48455027, 1.14992892, 1.3517217 ],
[ 0.64847485, -1.47836923, 2.52024026],
[ 0.01691785, 1.08003907, -0.3576492 ],
[-0.03622465, -1.33663009, 0.46016645]])

方法2:transpose

三维数组 arr:4个3*4的数组

In [275]: arr = np.arange(48).reshape(4,3,4)

In [276]: arr
Out[276]:
array([[[ 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, 30, 31],
         [32, 33, 34, 35]],

[[36, 37, 38, 39],
         [40, 41, 42, 43],
         [44, 45, 46, 47]]])

     
 

transpose参数的真正意义在于这个shape元组的索引(轴编号)。

In []: arr.shape
Out[]: (, , )

arr数组的索引(轴编号):0、1、2

下面是按索引 2、0、1进行对换

In []: arr.transpose(,,)
Out[]:
array([[[ , , ],
[, , ],
[, , ],
[, , ]], [[ , , ],
[, , ],
[, , ],
[, , ]], [[ , , ],
[, , ],
[, , ],
[, , ]], [[ , , ],
[, , ],
[, , ],
[, , ]]])

然后,我们再按(轴编号)0、1、2 对换回到原来的样子

In []: arr.transpose(,,)
Out[]:
array([[[ , , , ],
[ , , , ],
[ , , , ]], [[, , , ],
[, , , ],
[, , , ]], [[, , , ],
[, , , ],
[, , , ]], [[, , , ],
[, , , ],
[, , , ]]])

方法3:swapaxes

swapaxes返回的是源数组的视图。

相比于transpose是需要传入一个索引元组(轴编号),swapaxes只需要一对索引元组(轴编号)。

In []: arr.swapaxes(,)
Out[]:
array([[[ , , ],
[ , , ],
[ , , ],
[ , , ]], [[, , ],
[, , ],
[, , ],
[, , ]], [[, , ],
[, , ],
[, , ],
[, , ]], [[, , ],
[, , ],
[, , ],
[, , ]]])

最新文章

  1. [LeetCode] Can I Win 我能赢吗
  2. anyncTask的3个参数
  3. 自定义SeekBar的使用
  4. UVA-10269 (floyd+dijkstra)
  5. 【Log4j】 log4j.properties 使用
  6. EF6数据迁移
  7. windows下安装php真正的多线程扩展pthreads教程
  8. Scrapy的shell命令(转)
  9. Sublime一些设置
  10. React Native学习(二)—— 开始一个项目
  11. H5音乐自动播放ios//禁止安卓手机图片点击
  12. 63(原67).纯 CSS 创作单元素点阵 loader
  13. lampp中的ftp使用介绍
  14. Mac使用终端安装Homebrew(brew)
  15. 初始ASP.NET数据控件【续 DataList】
  16. MFC六大核心机制之五、六:消息映射和命令传递
  17. 【GDKOI2017】小队任务 莫比乌斯反演+杜教筛
  18. Java并发编程原理与实战三十二:ForkJoin框架详解
  19. 提升PHP速度
  20. 关于Filter中ServletRequest强转HttpServletRequest问题

热门文章

  1. 7.linux磁盘管理 分区 建立文件系统 挂载使用
  2. 5.linux 软件安装的三种方法
  3. final和finally的区别
  4. STM32 + RT Thread OS 串口通讯
  5. Dataeye计算任务架构
  6. vue 引入公共css文件
  7. mongo 导入import 导出 exprot操作
  8. spring (反射+代理+DI+AOP)
  9. java模拟post进行文件提交 采用httpClient方法
  10. iOS8.0如何使用Touch ID来做验证