# -*- 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解析(总算清楚一点了)的更多相关文章

  1. 与下位机或设备的通信解析优化的一点功能:T4+动态编译

        去年接触的一个项目中,需要通过TCP与设备进行对接的,传的是Modbus协议的数据,然后后台需要可以动态配置协议解析的方式,即寄存器的解析方式,,配置信息有:Key,数据Index,源数据类型 ...

  2. Gson解析List的一点小问题

    这阵子在使用gson解析时遇到了点小麻烦,因为一直用的fastjson,最近一个项目里使用的gson,需要解析list集合,查资料都是使用TypeToken解决,相对比较麻烦,下面为大伙推荐一种简便的 ...

  3. java webservice wsimport 无法将名称 'soapenc:Array' 解析为 'type definition' 组件 时对应的解决方法

    (一):代码如下: package com.enso.uploaddata; import org.apache.axis.client.Call; import org.apache.axis.cl ...

  4. PowerShell与CMD在路径解析上的一点不同

    对于路径含有空格的文件夹,在加入PATH环境变量时,前后往往会加上引号.这种情况,CMD可以正确识别:但是Powershell却不能加上引号,否则无法定位路径. 例如,在PS中,$env:path查看 ...

  5. 使用JSONObject生成和解析json

    1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组,以"[]"括起来 Object 对象,类似于C中的结构体 ...

  6. 11、js 数组详细操作方法及解析合集

    js 数组详细操作方法及解析合集 前言 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总结,很多时候就算用过几次这个api,在开发中也很容易 ...

  7. 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 ...

  8. 【转载】使用JSONObject生成和解析json

    1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值 (1)json中不区分整数.小数等类型, ...

  9. xml文件解析(解析以后在RootTableViewController输出)

    这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 ,  就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...

随机推荐

  1. Ngnix学习笔记

    一.Ngnix介绍 1.概念 一个强大的Web服务器软件. 2.功能 1)处理高并发的http请求. 2)作为反向代理服务器来进行负载均衡. 3)数据压缩和解压缩处理 3.优势 高性能,轻量级,内存消 ...

  2. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...

  3. java异常中的finally(一)

    finally是保证语句能一定执行的.不管程序是否会报错,我们把程序一定要执行的代码放在finally中. 比如说流的关闭,不管在读写的过程中是否报错,一定要关闭流,可以把流的关闭操作放在finall ...

  4. java对象流(二)

    对象流,可以将java中的对象转为字节进行输出.将对象写入文件时.文件输出流是将字节写入到文件中. 对象流是将给定的对象转化为一组字节.writeObject()方法就是将对象转为字节. 对象流,读的 ...

  5. 去除sql中不可见字符的n种方法

    CREATE TABLE [ASCII0127] ( Bin          INT, Dec          INT, Hex          VARCHAR(128), Abbr       ...

  6. Template、ItemsPanel、ItemContainerStyle、ItemTemplate(包括ListBox的Item子项是横向排列)

    Template.ItemsPanel.ItemContainerStyle.ItemTemplate 分类: WPF2011-10-12 10:13 4716人阅读 评论(0) 收藏 举报 data ...

  7. 解决:SyntaxError: Non-ASCII character in file

    今天尝试用monkeyrunner脚本在夜神模拟器上安装并截图QQ,但是遇到了一些问题: from com.android.monkeyrunner import MonkeyRunner, Monk ...

  8. Spring MVC数据绑定大全 .

    刚开始用spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时 ...

  9. spring发布RMI服务(-)

    spring发布RMI服务 最近交流了一个项目,需要从RMI.WebService.接口文件中采集数据到大数据平台,下面自己测试了通过Spring发布RMI服务. 说明:RMI服务要求服务端和客户端都 ...

  10. yii2.0缓存的使用

    1.片段缓存(针对于视图中的某部分进行缓存): <?php 设置有效时间 $time=15; 缓存依赖,存入文件.当文件内容发生改变是才会刷新新内容 $dependecy=[ 'class'=& ...