numpy 添加删除去重及形状变换

一、数组的添加删除与去重

下面是几个常见的数组操作:

  1. append:将值添加到数组末尾
  2. insert: 沿指定轴将值插入到指定下标之前
  3. delete: 返回删掉某个轴的子数组的新数组
  4. unique: 寻找数组内的唯一元素
>>> a = np.array([[1,2,3],[4,5,6]])
>>> np.append(a, [7,8,9])  # 附加后,变成了一维的
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a  #原来的数组没有改变
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.append([10,11,12]) # ndarray没有这个方法
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-165-a36f3ca1308b> in <module>()
----> 1 a.append([10,11,12])

AttributeError: ‘numpy.ndarray‘ object has no attribute ‘append‘
>>> np.append(a, [[7,8,9]],axis = 0)  # 注意参数格式
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

>>> a = np.array([[1,2],[3,4],[5,6]])
>>> np.insert(a,3,[11,12])  # 在3号位置前插入,变成一维了
array([ 1,  2,  3, 11, 12,  4,  5,  6])
>>> a
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.insert(a,1,[11],axis = 0) # 按行插入
array([[ 1,  2],
       [11, 11],
       [ 3,  4],
       [ 5,  6]])
>>> np.insert(a,1,[11],axis = 1) #按列插入
array([[ 1, 11,  2],
       [ 3, 11,  4],
       [ 5, 11,  6]])

>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.delete(a,5)# 删除指定位置的元素后,变成一维了
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])
>>> np.delete(a,1,axis = 0)
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])
>>> a  # 并不会修改原来的数组
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.delete(a,1,axis = 1)
array([[ 0,  2,  3],
       [ 4,  6,  7],
       [ 8, 10, 11]])

unique是numpy中非常重要的方法:

>>> a = np.array([0,1,4,7,2,1,4,3])
>>> a
array([0, 1, 4, 7, 2, 1, 4, 3])
>>> np.unique(a)
array([0, 1, 2, 3, 4, 7])
>>> b = np.array([[0,1,4,],[7,2,1],[4,3,0]])
>>> b
array([[0, 1, 4],
       [7, 2, 1],
       [4, 3, 0]])
>>> np.unique(b)
array([0, 1, 2, 3, 4, 7])
>>> np.unique(b,axis=0)
array([[0, 1, 4],
       [4, 3, 0],
       [7, 2, 1]])
>>> np.unique(b,axis=1)
array([[0, 1, 4],
       [7, 2, 1],
       [4, 3, 0]])
>>> b = np.array([[0,1,4,],[7,2,1],[4,3,0],[0,1,4,]])
>>> b
array([[0, 1, 4],
       [7, 2, 1],
       [4, 3, 0],
       [0, 1, 4]])
np.unique(b,axis=0)
array([[0, 1, 4],
       [4, 3, 0],
       [7, 2, 1]])

二、数组的形状变换

之前介绍过,可以通过数组的shape属性,查看它的形状:

>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[ 2.,  8.,  0.,  6.],
       [ 4.,  5.,  1.,  1.],
       [ 8.,  9.,  3.,  6.]])
>>> a.shape
(3, 4)

上面的例子中,先通过numpy的random函数生成一个随机3行4列数组,再对每个元素乘10,最后用floor函数取整。

有很多数组方法可以变换它的形状,并且不修改原始数组本身:

>>> a.ravel()  # 平铺数组成为一维数组
array([ 2.,  8.,  0.,  6.,  4.,  5.,  1.,  1.,  8.,  9.,  3.,  6.])
>>> a.reshape(6,2)  # 调整形状
array([[ 2.,  8.],
       [ 0.,  6.],
       [ 4.,  5.],
       [ 1.,  1.],
       [ 8.,  9.],
       [ 3.,  6.]])
>>> a.T  # 返回转置数组
array([[ 2.,  4.,  8.],
       [ 8.,  5.,  9.],
       [ 0.,  1.,  3.],
       [ 6.,  1.,  6.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)

reshape方法不会修改数组本身,resize则正好相反:

>>> a
array([[ 2.,  8.,  0.,  6.],
       [ 4.,  5.,  1.,  1.],
       [ 8.,  9.,  3.,  6.]])
>>> a.resize((2,6))
>>> a
array([[ 2.,  8.,  0.,  6.,  4.,  5.],
       [ 1.,  1.,  8.,  9.,  3.,  6.]])
>>> a.resize((2,7)) # 突发奇想,作死试试
alueError                                Traceback (most recent call last)
<ipython-input-162-8df1a3f67bca> in <module>()
----> 1 a.resize(2,7)

ValueError: cannot resize an array that references or is referenced
by another array in this way.  Use the resize function

>>> np.resize(a, (2,7)) # 但是...居然可以这么干!
array([[2., 8., 0., 6., 4., 5., 1.],
       [1., 8., 9., 3., 6., 2., 8.]])

# 再次提醒,在numpy中有各种类似的坑,你根本踩不过来,所以不要尝试一些自己不确定的东西。

如果reshape方法的一个参数是-1,那么这个参数的实际值会自动计算得出:

>>> a.reshape(3,-1)
array([[ 2.,  8.,  0.,  6.],
       [ 4.,  5.,  1.,  1.],
       [ 8.,  9.,  3.,  6.]])

原文地址:https://www.cnblogs.com/lavender1221/p/12630748.html

时间: 2024-11-05 20:38:01

numpy 添加删除去重及形状变换的相关文章

双链集合添加删除算法

双链集合添加删除算法: package com.linkes; public class MyLinkeList { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ /** * 链表集合他是于双链条式进行引用上下家,好处可以知道上家和下家是谁 * 利于修改,可以从首部开始删除数据也可以从尾部删除. * 即可从中间指定位置删除. */ private Object[] shou; private Object[] wei; // 默

如何恢复,迁移,添加, 删除 Voting Disks

如何恢复,迁移,添加, 删除 Voting Disks恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份.DD示例 备份votedisk盘:[[email protected] bin]# dd if=/dev/raw/raw2 of=/home/oracle/voting_disk.bak 恢复votedisk盘:[[email protected] bin]# dd if=/home/oracle/voting_disk.bak of=/dev/raw

Linux/Ubuntu中添加删除新用户

操作环境:Ubuntu Server 14.04,系统上仅有一个用户root 1. adduser 命令添加新用户 #adduser username 注意adduser与useradd命令的区别,useradd是Linux系统中二进制可执行程序工具,adduser是封装了useradd之后的可执行脚本.因此adduser比useradd功能更加强大和智能,adduser在创建用户同时进行创建用户主目录等其他相关工作. 2.赋予新建用户管理员权限 只需要将用户加入sudo用户组中就可以赋予用户管

JTree 添加 , 删除, 修改

package com.swing.demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.CellEdi

class 样式的添加,删除,切换

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="script/jquery-1.11.0.min.js" type="text/javascript"></script> <style type="text/css"&g

为虚拟磁盘 添加/删除物理磁盘

为虚拟磁盘 添加/删除物理磁盘 Add-Physicaldisk     此命令用于将指定的物理磁盘添加到虚拟磁盘    在存储池一节已经介绍过将物理磁盘加入存储池的用法,    在这里将介绍在虚拟磁盘上的用法    在正式介绍命令用法之前先回答 在Get-StoragePool,Get-VirtualDisk,New-VirtualDisk    三节中的提问    要获取未被虚拟磁盘使用的物理磁盘,你必须学会灵活的使用管道命令    $pool_pd = @(Get-StoragePool 

&lt;linux小脚本&gt;批量添加/删除用户

批量添加/删除用户,当输入add时,判断用户是否存在,存在则显示存在,不存在则添加:当输入del时,判断用户是否存在,存在则删除用户,不存在则显示不存在. #!/bin/bash if [ $1 == "add" ];then for i in {1..10}; do if id user$i &> /dev/null;then echo "the user$i exists!" else useradd user$i &> /dev/n

SQL Server 如何添加删除外键、主键,以及更新自增属性

1.添加删除主键和外键 例如: -----删除主键约束DECLARE @NAME SYSNAMEDECLARE @TB_NAME SYSNAMESET @TB_NAME = 'Date'SELECT TOP 1  @NAME=NAME FROM SYS.OBJECTS WITH(NOLOCK)WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND PARENT_OBJECT_ID = (    SELECT OBJECT_ID    FROM SYS.OBJE

002-UIImageView和UIButton对比 UIImageView的帧动画 格式符补充 加载图片两种方式 添加删除SUBVIEW

一>.UIImageView和UIButton对比 显示图片 1> UIImageView只是一种图片(图片默认会填充整个UIImageView)  image\setImage: 2> UIButton能显示2种图片 * 背景 (背景会填充整个UIButton)  setBackgroundImage:forState: * 前置(覆盖在背景上面的图片,按照之前的尺寸显示)  setImage:forState: * 还能显示文字 点击事件 1> UIImageView默认是不能