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 ...
随机推荐
- Java中使用注释
在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上.因此,注释是程序源代码的重要组成部分,一定要加以重视哦! Ja ...
- character_set_connection、character_set_results、 character_set_client的作用
如题.通常的使用中,character_set_client,character_set_connection这两个变量的值是一样的,也就是说查询不需要进行编码转换.这样看来变量character_s ...
- Jedis分片连接池
[http://blog.csdn.net/lang_man_xing/article/details/38405269] 一下内容来自网络,但是很多细节没有写出来,所以我经过自己琢磨,终于找到原 ...
- Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions
Model compatibility cannot be checked because the database does not contain model metadata. Ensure t ...
- nyojb 2359 巴什博弈变形
http://acm.nyist.me/JudgeOnline/problem.php?id=2359 2359: 巴什博弈? 时间限制: 1 Sec 内存限制: 30 MB提交: 237 解决: ...
- c#将DataTable内容导出为CSV文件
写了个类: class DataTableAndCSV { public static DataTable csvToDataTable(string file) { string strConn = ...
- poj-1426-Find The Multiple(打表水过)
思路: 2的最近可以整除的数是10 所以,很关键的一点,只要是偶数,例如: 6:2*3,可以拆分为能够被2整除和能够被3整除的乘积,所以,10*111=1110 144:72*2,8*9*2,2*2* ...
- C#中DEV控件,XtraTabPage得小方法
DEV控件设计窗体程序,XtraTabPage用到的小方法,欢迎大家评论,分享技术! //DEV中的选项卡 private bool TabCtlPageExist(string pageName) ...
- 不同OpenCV版本和不同VS版本之间进行配置的注意事项
下面内容为不同系统和不同版本VS+不同版本OpenCV之间进行配置时的注意事项.本教程中开始提到如果VS版本和OpenCV版本相匹配的话,只要按上述步骤配置都是没有问题的.但是如果说版本不匹配的话,就 ...
- BZOJ5118:Fib数列2(O1快速模)
题意:输入N,输出fib(2^N)%1125899839733759.(P=1125899839733759是素数) 思路:欧拉降幂,因为可以表示为矩阵乘法,2^N在幂的位置,矩阵乘法也可以降幂,所以 ...