我想获得标记为map的连通组件中的区域数量 例如:
[Image value]
00011100022200
00011000002220
00000033300220
44000033000020
44000000000000
如果内核大小是3x3,我想在相同大小的2D数组中获得唯一值的数量。
例如,新的2D数组具有以下值:
newarray[3,3]=2
newarray[2,4]=1
newarray[2,2]=0
我正在使用Python,任何想法?
答案 0 :(得分:0)
这可以使用numpy
来完成,101
200
000
具有很好的语法。
假设我们有输入数据:
import numpy as np
data = np.array([[1,0,1],[2,0,0],[0,0,0]])
submatrix = data[0:2,0:2]
你可以在numpy中定义它并检索左上角的2x2子矩阵:
values = list(submatrix.flatten())
without_zeros = list(filter(None, values))
unique_values_not_zero = set(without_zeros)
您的内核函数似乎是"内核区域"中唯一值的数量不等于零。这可以使用标准的python函数计算:
apply_kernel_to_matrix
从这里开始,你应该能够再次继续。以下列出了现在仍需要实施的未解决问题:
unique_values_kernel
和apply_kernel_to_matrix
,以便稍后可以添加更多内核,稍后再重用package org.test.scala
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.streaming._
import org.apache.spark.SparkContext._
import org.apache.spark.streaming.twitter._
object twitterAnalysis {
val conf = new SparkConf().setAppName("twitter sentiment analysis")
val sc = new SparkContext(conf)
def main(args: Array[String]): Unit = {
sc.setLogLevel("WARN")
val filters = args
for(i <- filters) { println("recieved arg" + i) }
/* setting up the Twitter4j library parameters */
System.setProperty("twitter4j.oauth.consumerKey", mykey)
System.setProperty("twitter4j.oauth.consumerSecret", mysecret)
System.setProperty("twitter4j.oauth.accessToken", acesskey)
System.setProperty("twitter4j.oauth.accessTokenSecret", accesssecret)
val ssc = new StreamingContext(sc,Seconds(5))
val stream = TwitterUtils.createStream(ssc,None,filters)
//stream.print()
val hashtags = stream.flatMap( status => status.getText.split(" ").filter( _.startsWith("#")) )
println("here are the elements of HashTags")
// hashtags.print()
val topcounts60 = hashtags.map((_,1)).reduceByKeyAndWindow(_ + _ ,Seconds(60))
.map { case (topic,count) => (count,topic) }
.transform(_.sortByKey(false))
topcounts60.foreachRDD(rdd => {
val toplist = rdd.take(10)
println("\n Popular topics in last 10 seconds ( %s total) ".format(rdd.count()))
toplist.foreach { case (count,tag) => println("%s (%s tweets)".format(tag, count)) }
})
ssc.start
ssc.awaitTermination
}
}
函数。阅读lambda函数。