pyspark有没有matlab slice函数用法

求助,关于slice函数,如何将切平面扩大?如图_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:167,097贴子:
求助,关于slice函数,如何将切平面扩大?如图收藏
如何将切平面延伸至450?
登录百度帐号推荐应用golang的slice作为函数参数传值的坑
- Go语言中文网 - Golang中文社区
<meta name="author" content="polaris ">
golang的slice作为函数参数传值的坑
ziyouchutuwenwu
· 3337 次点击 ·
开始浏览 & &
直接贴代码
func sliceModify(slice []int) {
// slice[0] = 88
slice = append(slice, 6)
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(slice)
fmt.Println(slice)
返回的没变,坑爹的,这个设计太那啥了,可以正确跑出效果的版本如下:
func sliceModify(slice *[]int) {
*slice = append(*slice, 6)
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(&slice)
fmt.Println(slice)
3337 次点击 &
2 回复 &| &直到
请尽量让自己的回复能够对别人有帮助
支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
支持 @ 本站用户;支持表情(输入 : 提示),见
记住登录状态
直接贴代码
func sliceModify(slice []int) {
// slice[0] = 88
slice = append(slice, 6)
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(slice)
fmt.Println(slice)
返回的没变,坑爹的,这个设计太那啥了,可以正确跑出效果的版本如下:
func sliceModify(slice *[]int) {
*slice = append(*slice, 6)
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(&slice)
fmt.Println(slice)
999 人在线
&最高记录 1061
&2012- Go语言中文网,中国 Golang 社区,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。
Powered by
&o&服务器由
赞助 &·&CDN 由
VERSION: V3.0.0&·&3.598674ms&·&为了更好的体验,本站推荐使用 Chrome 或 Firefox 浏览器
登录和大家一起探讨吧
记住登录状态
还不是会员Spark学习手册(三):Spark模块摘读 - 推酷
Spark学习手册(三):Spark模块摘读
Spark在其基础架构之上支持四大模块,分别是SparkSQL、SparkStreaming、MLlib和GraphX,本文将对这几个模块的手册进行阅读摘录。
一、Spark SQL
同Spark SQL的交互方式包括SQL、DataFrames API和Datasets API,但是其内部的执行引擎是一样的,只是对外表现的接口不一样而已。
SQL:可以使用基础的SQL语法或HiveQL,当在别的编程语言中执行SQL,返回的是DataFrame格式的结果。SQL的交互方式包括命令行方式,以及JDBC、ODBC对数据库的访问接口。
DataFrame:一种通过命名列组织的分布式数据存储,概念上和关系数据库的表等价,可以接受文件、数据库、RDD等数据源来创建。
Datasets:暂不支持Python,没研究。
1.2 从文件创建DataFrame
基础SQLContext环境创建,并从json文件创建DataFrame
&&& from pyspark.sql import SQLContext&&& sqlContext = SQLContext(sc)&&& df = sqlContext.read.json(&/root/spark-1.6.1-bin-hadoop2.6/examples/src/main/resources/people.json&)&&& df.show()+----+-------+| age|
name|+----+-------+|null|Michael||
19| Justin|+----+-------+
DataFrame的常用操作接口(看意思就明白的)
&&& df.printSchema()&&& df.select(&name&).show()&&& df.select(df['name'], df['age'] + 1).show()&&& df.filter(df['age'] & 21).show()&&& df.groupBy(&age&).count().show()
1.3 从RDD创建DataFrame
将已有的RDD转换为DataFrame有两种方法:一种是映射(reflection);另外一种是通过变成接口创建表,然后将RDD数据应用到表上面去
Reflection:通过创建(table_column_name, type)的Row对象,然后通过map将RDD每一行转换成Row,简单但是不够灵活
from pyspark.sql import SQLContext, RowsqlContext = SQLContext(sc)&&& lines = sc.textFile(&/root/spark-1.6.1-bin-hadoop2.6/examples/src/main/resources/people.txt&)&&& parts = lines.map(lambda l: l.split(&,&))&&& print(people.collect())[['Michael', ' 29'], ['Andy', ' 30'], ['Justin', ' 19']]&&& people = parts.map(lambda p: Row(name=p[0], age=int(p[1])))&&& print(people.collect())[Row(age=29, name='Michael'), Row(age=30, name='Andy'), Row(age=19, name='Justin')]# 创建schema,并注册成表&&& schemaPeople = sqlContext.createDataFrame(people)&&& schemaPeople.registerTempTable(&people&)&&& schemaPeople.printSchema()root |-- age: long (nullable = true) |-- name: string (nullable = true)# 访问表内容&&& teenagers = sqlContext.sql(&SELECT name FROM people WHERE age &= 13 AND age &= 19&)&&& print(teenagers.collect())
# teenagers 是RDD的类型,可以常规的访问[Row(name='Justin')]
编程的方式创建
这种一般是事先不知道表结构,比如传递过来动态解析的表结构的情况下,就只能这么操作了。
下面的例子可以显示出来,其中列名是schemaString是通过动态的字符串创建的,所以在实际使用中可以各种方式指定,灵活性比较的强
from pyspark.sql import SQLContext, RowsqlContext = SQLContext(sc)&&& lines = sc.textFile(&/root/spark-1.6.1-bin-hadoop2.6/examples/src/main/resources/people.txt&)&&& parts = lines.map(lambda l: l.split(&,&))&&& people = parts.map(lambda p: Row(name=p[0], age=int(p[1])))# 创建schema stringschemaString = &name age&&&& fields = [StructField(field_name, StringType(), True) for field_name in schemaString.split()]&&& schema = StructType(fields)&&& print(fields)[StructField(name,StringType,true), StructField(age,StringType,true)]# 将创建的schema应用到people数据上去&&& schemaPeople = sqlContext.createDataFrame(people, schema)&&& schemaPeople.registerTempTable(&people&)&&& schemaPeople.printSchema()root |-- name: string (nullable = true) |-- age: string (nullable = true)&&& results = sqlContext.sql(&SELECT name FROM people&)&&& print(results.collect())[Row(name='29'), Row(name='30'), Row(name='19')]&&& df2 = sqlContext.read.load(&/root/namesAndAgesData.parquet&)
#default is parquet
其中,save支持额外的SaveMode参数,可选的值为”error”、”append”、”overwrite”、”ignore”,类似于普通文件接口,他们在目标文件存在的时候,表现为不同的形式。
1.4 Data Sources
文件的加载和保存这里是通用方式的文件加载和保存,意味着parquet和json都能使用。
&&& df = sqlContext.read.load(&/root/spark-1.6.1-bin-hadoop2.6/examples/src/main/resources/people.json&, format=&json&)&&& print(df.collect())[Row(age=None, name='Michael'), Row(age=30, name='Andy'), Row(age=19, name='Justin')]&&& df.select(&name&, &age&).write.save(&namesAndAgesData.parquet&, format=&parquet&)
编程方式加载和访问parquet格式文件的例子
&&& parquetFile = sqlContext.read.parquet(&/root/namesAndAgesData.parquet&)&&& parquetFile.registerTempTable(&parquetFile&); #可以注册为临时表&&& teenagers = sqlContext.sql(&SELECT name FROM parquetFile WHERE age &= 13 AND age &= 39&)&&& print(teenagers.collect())[Row(name='Justin'), Row(name='Andy')]
Json文件格式同上面的parquet一样的,只是对应的接口改成了sqlContext.read.json。同时,json还支持如下方式创建RDD:
&&& anotherPeopleRDD = sc.parallelize([\... '{&name&:&Yin1&,&address&:{&city1&:&Columbus&,&state&:&Ohios&}}',\... '{&name&:&Yin2&,&address&:{&city2&:&Columbus&,&state&:&Ohiot&}}'])&&& print(anotherPeopleRDD.collect())['{&name&:&Yin1&,&address&:{&city1&:&Columbus&,&state&:&Ohios&}}', '{&name&:&Yin2&,&address&:{&city2&:&Columbus&,&state&:&Ohiot&}}']&&& anotherPeople = sqlContext.jsonRDD(anotherPeopleRDD)[Row(address=Row(city1='Columbus', city2=None, city3=None, state='Ohios'), name='Yin1'), Row(address=Row(city1=None, city2='Columbus', city3=None, state='Ohiot'), name='Yin2')]
JDBC/ODBC访问启动的时候,需要指定JDBC的驱动,这个驱动可以在mysql的官方网站下载
&span&&a href=&/cdn-cgi/l/email-protection& data-cfemail=&a0b&&[email protected]&/a&
&script data-cfhash=&f9e31& type=&text/javascript&&/* &![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNif(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]& */
&/script&:~/spark-&span&1.6&/span&.&span&1&/span&-bin-hadoop2.&span&6&/span&&span&# PYSPARK_PYTHON=python3.4 SPARK_CLASSPATH=mysql-connector-java-5.1.38-bin.jar bin/pyspark&/span&&/span&&br /&
然后,就可以操作数据库了
&&& from pyspark.sql import *&&& sqlContext = SQLContext(sc)&&& df = sqlContext.read.format('jdbc').options(url='jdbc:mysql://113.106.94.201:3306/n_xxxxx', dbtable='v5_xxxxxx',user='xxxxx', password='xxxxxx').load()&&& df.take(3)
二、Spark Streaming
Spark Streaming是Spark核心组件对在线流数据处理的扩展。在内部,Spark接受在线输入流数据,将其分成batches,然后再将结果输出,其提供了一个高层次抽象的DStream,表示为一种持续的输入流,其输入可以为(Kafka、Flume、Kinesis……反正我也不懂……)以及其他的DStream,在内部,DStream表示为一系列的RDDs构成。
2.1 一个简单的例子,统计词的个数
import sysfrom pyspark import SparkContextfrom pyspark.streaming import StreamingContextif __name__ == &__main__&:
sc = SparkContext(&local[2]&, appName=&PythonStreamingNetworkWordCount&)
ssc = StreamingContext(sc, 1)
# 1s batch interval,为应用需求延迟和系统节点资源的权衡
lines = ssc.socketTextStream(&localhost&,9999) # 建立Dstream,从TCP获得数据
counts = lines.flatMap(lambda line: line.split(& &))\
#flatMap,一对多,一个句子分多个词
.map(lambda word: (word, 1))\
.reduceByKey(lambda a, b: a+b)
counts.pprint()
# 打印最开始的10个元素
ssc.start()
# 真正从此开始,开始接受输入并计算输出
ssc.awaitTermination() # 等待结束(手动停止或者出错,调用streamingContext.stop())
从两外一个终端开启”nc -lk 9999”不断输入作为数据源;另外一个终端提交任务”PYSPARK_PYTHON=python3.4 bin/spark-submit ../wordc_net.py “。
默认的Spark打印的是INFO,这时候屏幕会不断的滚动消息,将LogLevel设置为WARN才能看的清楚。
一旦sc调用start(),就不能添加或者设置新的流计算;
一旦sc停止,就不能被重新启动了;
同一时刻一个JVM只能有一个活动的sc;
当StreamingContext调用stop()的时候,默认也会将SparkContext停止掉,要想保持SparkContext活着,那么stop()的参数请将stopSparkContext设置为false;
一个SparkContext可以重用被创建多个StreamingContext,只要之前的StreamingContext关闭停止就可以了。
2.2 Discretized Streams (DStreams,离散流)
DStream作为Spark Streaming的抽象数据类型,其内部原理就是对于采集到的每隔一个batch interval时间间隔的数据,生成一个该阶段的RDD,然后,上层对于DStream的操作,实际上就映射到底层的RDD的操作了。
在一个程序中,可以创建多个input DStream,这些数据都会被同时接收和处理,但是需要考虑到实际executor的执行能力。还需要特别注意的是,一个input DStream接收数据是需要占用一个thread的,所以如果有n个输入,需要&2n个执行单元(local[2n]),否则就只能收数据,而收到的数据没有线程来处理了。
除了上面的TCP输入,还支持textFileStream输入,Spark Streaming会监测指定的文件目录,对于目录中新增的文件(嵌套目录不支持),会被当作新的数据源被处理,但是不支持文件内容的修改和新增等,这就意味着Spark Streaming一旦监测到该新增文件,就只接受一次该文件,因此一般都是别的地方将文件生成后,移动到监测的目录中。由于这种方式不需要使用receiver,所以这种情况不用增加额外的线程数目。
streamingContext.textFileStream(dataDirectory)
2.3 Transformations
和之前的支持差不多,这里只列出差异的函数。由于DStream底层就是RDD支撑的,所以这里函数和RDD函数之间的关系还是比较微妙的
countByValue()
计数,对于每个元素K,得到(K, Long)
transform(func)
对源DStream的每个RDD使用func转换,生成新的DStream,比如增加过滤器等,十分的强大
updateStateByKey(func)
通过func将上一个时刻DStream每个key的状态,更新为新的状态,如果上个状态没有该key,其值为None
这里的例子,是动态的对输入流的词频进行累计统计操作
def updateFunction(newValues, runningCount):
if runningCount is None:
#如果之前不存在,初始值为0
runningCount = 0
return sum(newValues, runningCount) if __name__ == &__main__&:
sc = SparkContext(appName=&PythonStreamingNetworkWordCount&)
ssc = StreamingContext(sc, 1)
ssc.checkpoint(&checkpoint&) #必须的
lines = ssc.socketTextStream(&localhost&,9999)
counts = lines.flatMap(lambda line: line.split(& &))\
.map(lambda word: (word, 1))\
.updateStateByKey(updateFunction)
counts.pprint()
ssc.start()
ssc.awaitTermination()
2.4 窗口操作
需要两个参数:窗口尺寸、滑动间隔,参数值都必须是batch interval的整数倍。其对应的接口函数在下面列出,其中第一个函数用于生成一个新的DStream,其余的都是原有RDD的聚合函数,只是作用于windows窗口模式下的多个RDD而已。
window(windowLength, slideInterval)
形成一个新的DStream
countByWindow(windowLength, slideInterval)
reduceByWindow(func, windowLength, slideInterval)
reduceByKeyAndWindow(func, windowLength, slideInterval, [numTasks])
reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks])
这个函数比较的厉害,有个反向函数invFunc,整个函数的意思就是对进入窗口的新数据用func,而对离开窗口的数据用invFunc
countByValueAndWindow(windowLength, slideInterval, [numTasks])
还有,默认窗口操作的数据都是persist缓存的,而默认的StorageLevel是MEMORY_ONLY_SER,不需要开发者手动调用。对于网络传递进来的数据流,默认的存储是复制到两个不同的节点上以实现容错。
2.5 DStream的输出操作
实际类似RDD的actions,一般是现实、保存数据到网络或者文件系统上,从而驱动了真正计算的执行(最后foreachRDD实际是func的操作驱动真正计算)
| 术语 | 说明 |
| — |:—–:|
| pprint() | 打印出最开始的10个元素,主要用于调试 |
| saveAsTextFiles(prefix, [suffix]) | 将DStream的数据保存为prefix-TIME_IN_MS[.suffix] |
| foreachRDD(func) | 针对每个RDD的操作,这个func是在driver中执行的~rdd.foreachPartition |
2.6 Checkpointing
既然是流数据的,那么程序就理应全天候跑的,Checkpointing就是设计出来应对这种应用的容错机制(系统出错\JVM崩溃等),用于带有容错机制的文件系统(如HDFS)中。Spark支持的Checkpointing包括
Metadata Checkpointing
保存了包括创建streaming应用的配置、DStream的操作、正在排队还未完成计算的batches等。这是用于driver programer节点出错时候的恢复。
Data Checkpoint
保存生成的RDDs到存储系统中,主要应对的是有状态的transformation,因为要生成新的RDD需要之前的RDD。当然,随着系统的执行,这样的依赖链会越来愈长,所以系统会周期性的将带有状态的transformation的中间RDDs保存到存储系统中。
对于程序中用到updateStateByKey/reduceByKeyAndWindow(with inverse function)这类有状态的transformation,以及期望driver programer能从错误中恢复出来,那么就需要使用checkpointing机制。
streamingContext.checkpoint(checkpointDirectory)
设置Checkpointing目录,可以开启checkpointing机制。然后通常是调用
context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)
这个函数,当检测checkpointDirectory不存在的时候,说明是第一次执行,functionToCreateContext被调用,当driver programer出错而自动重新启动(由部署的deployment infrastructure支持)的时候,这个目录存在了,就不会再次调用functionToCreateContext函数来创建SparkContext和StreamingContext了。
2.7 实时性
总结来说,Spark Stream实际就是一个时间窗口内的RDD操作,然后通过增加各种函数来关联之前的数据,从本质上来说,算是一个大颗粒的周期性任务,如果时间间隔太大,延迟就严重;间隔太小,反复的提交调度任务,系统的吞吐量降低,负载也会加重。
包括常用的分类、聚类、回归等算法的实现。
四、GraphX
这个可不是图形化现实,而是基于图的算法,比如大名鼎鼎的PageRank,此处暂且不论了。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致查看: 7961|回复: 6|关注: 0
matlab的slice函数的使用之参数设置
<h1 style="color:# 麦片财富积分
新手, 积分 9, 距离下一级还需 41 积分
slice函数的调用格式为slice(X,Y,Z,V,sx,sy,sz);我已经知道了V(X,Y,Z)表示超立体曲面,V表示第四维的颜色值,但是sx,sy,sz代表什么呢?看到一篇帖子说是表示各点的坐标由参量sx,sy,sz指定,还有说是定义切片的位置,那么具体怎么理解呢?可以举个例子详细说一下吗?为什么sx,sy,sz可以用具体的数值表示,也可以用([],[],2:.5,4)这种类型表示呢?这些都代表什么含义呢?求指导!谢谢
<h1 style="color:# 麦片财富积分
MATLAB中用slice函数来完成
(1)slice(x,y,z,w,sx,sy.sz):绘制向量sx,sy,sz中的点沿x,y,z轴方向的切片图,v的大小决定了每一点的颜色。
(2)slice(x,y,z,w,x1,y1,z1):按数组x1,y1,z1切片(按坐标轴单位)。
(3)slice(w,x1,y1,z1):按数组x1,y1,z1切片(按x,y,z的网格单位进行切片。
(4)slice(w,sx,sy,sz):按x,y,z的网格单位进行切片。
有谁能举例告诉我具体的x1,y1,z1以及sx,sy,sz分别如何赋值,如何使用啊???谢谢,由于总是用不对这个函数,所以才来急求的呀!
<h1 style="color:# 麦片财富积分
<h1 style="color:# 麦片财富积分
感觉开始有点懂了
<h1 style="color:# 麦片财富积分
xieixe:D:P
<h1 style="color:# 麦片财富积分
关注者: 1
slice不可以切不垂直于坐标轴的图么?
<h1 style="color:# 麦片财富积分
slice不可以切不垂直于坐标轴的图么?
同问,能否有斜切面??
站长推荐 /2
Powered by网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&正文
javascript中不易分清的slice,splice和split三个函数
每每见到这三个函数,我都会很懵,一定要到网上搜搜;今天,恰巧又见到了它们,所以想必是时候为它们做个笔记啦
1.slice(数组)
用法:array.slice(start,end)
解释:该方法是对数组进行部分截取,并返回一个数组副本;参数start是截取的开始数组索引,end参数等于你要取的最后一个字符的位置值加上1(可选)
//如果不传入参数二,那么将从参数一的索引位置开始截取,一直到数组尾
var a=[1,2,3,4,5,6];
var b=a.slice(0,3);
var c=a.slice(3);
//如果两个参数中的任何一个是负数,array.length会和它们相加,试图让它们成为非负数,举例说明:
//当只传入一个参数,且是负数时,length会与参数相加,然后再截取
var a=[1,2,3,4,5,6];
var b=a.slice(-1);
//当只传入一个参数,是负数时,并且参数的绝对值大于数组length时,会截取整个数组
var a=[1,2,3,4,5,6];
var b=a.slice(-6);
//[1,2,3,4,5,6]
var c=a.slice(-8);
//[1,2,3,4,5,6]
//当传入两个参数一正一负时,length也会先于负数相加后,再截取
var a=[1,2,3,4,5,6];
var b=a.slice(2,-3);
//当传入一个参数,大于length时,将返回一个空数组
var a=[1,2,3,4,5,6];
var b=a.slice(6);  //[]
2.slice(字符串)
用法:string.slice(start,end)
解释:slice方法复制string的一部分来构造一个新的字符串,用法与参数匀和数组的slice方法一样;end参数等于你要取的最后一个字符的位置值加上1
//举个简单的例子
var a="i am a boy";
var b=a.slice(0,6);
//"i am a"
3.splice(数组)
用法:array.splice(start,deleteCount,item...)
解释:splice方法从array中移除一个或多个数组,并用新的item替换它们。参数start是从数组array中移除元素的开始位置。参数deleteCount是要移除的元素的个数。
如果有额外的参数,那么item会插入到被移除元素的位置上。它返回一个包含被移除元素的数组。
//举一个简单的例子
var a=['a','b','c'];
var b=a.splice(1,1,'e','f');
//a=['a','e','f','c'],b=['b']
4.split(字符串)
用法:string.split(separator,limit)
解释:split方法把这个string分割成片段来创建一个字符串数组。可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。如果
separator是一个空字符,会返回一个单字符的数组。
//再举一个简单的例子
var a="0123456";
var b=a.split("",3);
//b=["0","1","2"]
以上就是本文的全部内容,希望对大家的学习有所帮助。
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]}

我要回帖

更多关于 python slice函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信