list array解析(总算清楚一点了)
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 09 23:04:51 2016 @author: Administrator
""" import numpy as np '''
python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。
在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,'a']需要4个指针和四个数据,增加了存储和消耗cpu。
numpy中封装的array有很强大的功能,里面存放的都是相同的数据类型
'''
#模块1 array list 基本展示
list1=[1,2,3,'a']
print list1 a=np.array([1,2,3,4,5])
b=np.array([[1,2,3],[4,5,6]])
c=list(a) # array到list的转换
print a,np.shape(a)
print b,np.shape(b)
print c,np.shape(c) '''
[1, 2, 3, 'a']
[1 2 3 4 5] (5L,)
[[1 2 3]
[4 5 6]] (2L, 3L)
[1, 2, 3, 4, 5] (5L,)
''' '''
whos
Variable Type Data/Info
-------------------------------
a ndarray 5L: 5 elems, type `int32`, 20 bytes
b ndarray 2Lx3L: 6 elems, type `int32`, 24 bytes
c list n=5
list1 list n=4
np module <module 'numpy' from 'C:\<...>ages\numpy\__init__.pyc'>
''' #模块2
#创建:array的创建:参数既可以是list,也可以是元组.使用对应的属性shape直接得到形状
print '222222222222222222222222222222222222222222\n'
a=np.array((1,2,3,4,5))# 参数是元组
b=np.array([6,7,8,9,0])# 参数是list
c=np.array([[1,2,3],[4,5,6]])# 参数二维数组
print a,b
print c.shape
#[1 2 3 4 5] [6 7 8 9 0] (2L, 3L) #print a,b,
#[1 2 3 4 5] [6 7 8 9 0]
#(2L, 3L) 注意:print 后面加上 \n 换行;注意:print a,b b后面没有,换行了,如果有,不换行 #模块3 也可以直接改变属性array的形状,-1代表的是自己推算
print '33333333333333333333333333333333333333333333\n'
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
print c.shape # (3L, 4L)
c.shape=4,-1
print c
c.reshape(2,-1)
print c
print 'reshape产生新的变量'
x = c.reshape(2,-1)
print x
'''
33333333333333333333333333333333333333333333 (3L, 4L)
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
reshape产生新的变量
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]]
'''
'''
里的reshape最终相当于是一个浅拷贝,也就是说还是和原来的书c使用相同的内存空间
'''
x[0]=1000
print x
print c
'''
33333333333333333333333333333333333333333333 (3L, 4L)
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
reshape产生新的变量
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]]
[[1000 1000 1000 1000 1000 1000]
[ 6 7 7 8 9 10]]
[[1000 1000 1000]
[1000 1000 1000]
[ 6 7 7]
[ 8 9 10]]
''' #模块4 前面在创建数组的时候并没有使用数据类型,这里我们也可以使用数据类型。默认的是int32.
a1=np.array([[1,2,3],[4,5,6]],dtype=np.float64)
print a1.dtype,a.dtype
#float64 int32 #模块5 前面在创建的时候我们都是使用的np.array()方法从tuple或者list转换成为array,感觉很是费劲,numpy自己提供了很多的方法让我们自己直接创建一个array.
arr1=np.arange(1,10,1)
arr2=np.linspace(1,10,10)
print arr1,arr1.dtype
print arr2,arr2.dtype
'''
[1 2 3 4 5 6 7 8 9] int32
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] float64
np.arange(a,b,c)表示产生从a-b不包括b,间隔为c的一个array,数据类型默认是int32。但是linspace(a,b,c)表示的是把a-b平均分成c分,它包括b。
''' #模块6 有时候我们需要对于每一个元素的坐标进行赋予不同的数值,可以使用fromfunction函数
print '666666666666666666\n'
def fun(i):
return i%4+2
print np.fromfunction(fun,(10,)) #[ 2. 3. 4. 5. 2. 3. 4. 5. 2. 3.]
def fun2(i,j):
return (i+1)*(j+1)
print np.fromfunction(fun2,(9,9)) '''
虽然说,这里提供了很多的直接产生array的方式,但是大部分情况我们都是会从list进行转换,因为在实际的处理中,我们需要从txt加载文件,那样直接读入的数据显示存放到list中,
需要处理的时候我们转换到array,因为array的设计更加符合我们的使用,涉及到矩阵的运算在使用mat,那么list主要就是用进行元素的索取。
'''
def loaddataSet(fileName):
file=open(fileName)
dataMat=[]
for line in file.readlines():
curLine=line.strip().split('\t')
floatLine=map(float,curLine) #这里使用的是map函数直接把数据转化成为float类型
dataMat.append(floatLine)
return dataMat #上面的返回最终的数据就是最初的list数据集,再根据不同的处理需求是转化到array还是mat。其实array是mat的父类,能用mat的地方,array理论上都能传入。 #模块7 元素访问:
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print ''
''' 一维数组方法
arr[5] #5
arr[3:5] #array([3, 4])
arr[:5] #array([0, 1, 2, 3, 4])
arr[:-1]# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
arr[:] #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[2:4]=100 # array([ 0, 1, 100, 100, 4, 5, 6, 7, 8, 9])
arr[1:-1:2] #array([ 1, 100, 5, 7]) 2 是间隔
arr[::-1] #array([ 9, 8, 7, 6, 5, 4, 100, 100, 1, 0])
arr[5:2:-1]# -1的间隔表示从右向左所以5>2 #array([ 5, 4, 100])
''' #我们再来看看二维的处理方式
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
print c[1]
print c[1:2]
print c[1][2]
print c[1:4]
print c[1:4][0][2] '''
[4 5 6 7]
[[4 5 6 7]]
6
[[ 4 5 6 7]
[ 7 8 9 10]]
6
可以看出对于有:的表达最终的结果外面还嵌套一层list的[],。访问的一定要注意,python最bug的就是,语法
灵活,不管怎样写索引语法都是正确的,但是最终的书结果却让你大跌眼镜。
还有array的索引最终产生的是一个一个原始数据的浅拷贝,还和原来的数据共用一块儿内存
'''
b=arr[1:6]
b[:3]=0
print b #产生上面的原因是因为array中直接存放的数据,拷贝的话直接拿走的是pointer,没有取走数据,但是list却会直接发生深拷贝,数据指针全部带
list1=list(c)
list1[1]=0
print list1 #上面修改的0并没有被改变
print c
#[array([1, 2, 3, 4]), 0, array([ 7, 8, 9, 10])] #模块8 '''
除了这些之外还有自己的更加牛掰的方式(只能用array)
1)使用布尔数组.感觉甚是强大,就不要自己写什么判断语句啦,注意这种方式得到结果不和原始数组共享空间。
布尔索引仅仅适用于数组array,list没资格用。布尔索引最终得到下标索引为true的数据。索引只能是布尔数组
'''
print '888888888888\n'
a=np.array((1,2,3,4,5))# 参数是元组
a=np.array(a*2)
print a[a>5] #[ 6 8 10]
print a>5 # [False False True True True] #列表索引可以是数组和list。返回的数据不和原来的数据共享内存。索引可以是list和array
x=np.arange(10)
index=[1,2,3,4,5]
arr_index=np.array(index)
print x
print x[index] # list索引
print x[arr_index] # array索引 print '8-1'
a=np.arange(10)
lista=list(a)
print a*2
print lista*2 #大跌眼镜,数组和list的乘积很吓人 '''
[ 0 2 4 6 8 10 12 14 16 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
''' #模块9 array的广播
print '9\n'
a = np.arange(0, 60, 10).reshape(-1, 1)
b = np.arange(0, 5)
print a
print b
print np.add(a,b)
list array解析(总算清楚一点了)的更多相关文章
- 与下位机或设备的通信解析优化的一点功能:T4+动态编译
去年接触的一个项目中,需要通过TCP与设备进行对接的,传的是Modbus协议的数据,然后后台需要可以动态配置协议解析的方式,即寄存器的解析方式,,配置信息有:Key,数据Index,源数据类型 ...
- Gson解析List的一点小问题
这阵子在使用gson解析时遇到了点小麻烦,因为一直用的fastjson,最近一个项目里使用的gson,需要解析list集合,查资料都是使用TypeToken解决,相对比较麻烦,下面为大伙推荐一种简便的 ...
- java webservice wsimport 无法将名称 'soapenc:Array' 解析为 'type definition' 组件 时对应的解决方法
(一):代码如下: package com.enso.uploaddata; import org.apache.axis.client.Call; import org.apache.axis.cl ...
- PowerShell与CMD在路径解析上的一点不同
对于路径含有空格的文件夹,在加入PATH环境变量时,前后往往会加上引号.这种情况,CMD可以正确识别:但是Powershell却不能加上引号,否则无法定位路径. 例如,在PS中,$env:path查看 ...
- 使用JSONObject生成和解析json
1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组,以"[]"括起来 Object 对象,类似于C中的结构体 ...
- 11、js 数组详细操作方法及解析合集
js 数组详细操作方法及解析合集 前言 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总结,很多时候就算用过几次这个api,在开发中也很容易 ...
- LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku
1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...
- 【转载】使用JSONObject生成和解析json
1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值 (1)json中不区分整数.小数等类型, ...
- xml文件解析(解析以后在RootTableViewController输出)
这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 , 就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...
随机推荐
- 通过yum安装mysql
在linux中安装数据库首选MySQL,Mysql数据库的第一个版本就是发行在Linux系统上,其他选择还可以有postgreSQL,oracle等 在Linux上安装mysql数据库,我们可以去其官 ...
- Java JDK、Tomcat、Eclipse环境配置
Java 下载地址:http://www.oracle.com/ 根据提示一步一步进行安装,通常安装到C:\Program Files\Java,包含: 环境变量配置: JAVA_HOME:C:\Pr ...
- css3表格样式
<caption> 关于表格存储内容的描述或总结. 1.border-spacing:0;border-spacing 属性设置相邻单元格的边框间的距离(仅用于“边框分离”模式). 2. ...
- cms实例笔记(二)
栏目分级: 一.首页 二.解决方案 (栏目) 1.栏目模型 名称: 新闻: 封面模板:cover.html (没有子栏目模型不会用到) 列表页模板:list.html 2.文档模型 名称:新闻 模板: ...
- [thinkphp使用phpspreadsheet时出现]Cannot redeclare xxxxxx() (previously declared in C:\WWW\xxx.xxx:xxx)
[thinkphp使用phpspreadsheet时出现]Cannot redeclare xxxxxx() (previously declared in C:\WWW\xxx.xxx:xxx) 一 ...
- unity调用C++ dll文件
首先建立Plugins文件夹,把dll文件放在里面 一一对应,我踩的坑是文件名加了后缀.dll,虽然不知道网上为什么都加了我这加了就报找不到dll文件错误,反正解决啦
- c#加密,java解密(3DES加密)
c#代码 using System; using System.Security; using System.Security.Cryptography; using System.IO; using ...
- 论文笔记 — Learning to Compare Image Patches via Convolutional Neural Networks
论文: 引入论文中的一句话来说明对比图像patches的重要性,“Comparing patches across images is probably one of the most fundame ...
- C++(十一)— map的插入、查找、删除
标准库map类型是一种以键-值(key-value)存储的数据类型. map是STL的一个关联容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值 ...
- iTerm2 + Oh My Zsh
iTerm2 http://iterm2.com/downloads.html https://iterm2.com/downloads/stable/iTerm2-2_1_4.zip Oh My Z ...