在c#4.0中,动态方法参数是否可能,如下面的代码?
public string MakeItQuack(dynamic duck)
{
string quack = duck.Quack();
return quack;
}
Run Code Online (Sandbox Code Playgroud)
我在C#4.0中有很多很酷的动态关键字示例,但不像上面那样.这个问题当然受到python如何工作的启发.
在Lucene查询语法中,我想在有效查询中组合*和〜,类似于:bla~*//无效查询
含义:请匹配以"bla"开头的单词或类似"bla"的单词.
更新:我现在所做的,适用于小输入,使用以下(SOLR模式的片段):
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
Run Code Online (Sandbox Code Playgroud)
如果您不使用SOLR,则执行以下操作.
Indextime:通过创建包含my(短)输入的所有前缀的字段来索引数据.
搜索时间:仅使用〜运算符,因为前缀明确存在于索引中.
我想使用grep和一个stopwords文件来过滤掉另一个文件中的常用英语单词.文件"somefile"每行包含一个单词.
cat somefile | grep -v -f stopwords
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:它检查停用词中的单词是否出现在某个文件中,但我想要相反,即检查某些文件中的单词是否出现在停用词中.
这该怎么做?
例
somefile包含以下内容:
hello
o
orange
Run Code Online (Sandbox Code Playgroud)
停用词包含以下内容:
o
Run Code Online (Sandbox Code Playgroud)
我想从somefile中过滤出单词"o",而不是hello和orange.
在Skiena的"算法设计手册"一书中,计算一组的模式(最常见的元素),据说有一个Ω(n log n)下界(这让我很困惑),但也(正确的我猜)没有更快的最坏情况算法用于计算模式.我只是被下限Ω(n log n)困惑了.
但是在某些情况下,这肯定可以在线性时间(最好的情况)中计算,例如通过下面的Java代码(找到字符串中最常见的字符),"技巧"是使用哈希表计算出现的事件.这似乎很明显.
那么,在我对这个问题的理解中,我错过了什么?
编辑:(神秘解决)正如StriplingWarrior指出的那样,如果仅使用比较,则下限成立,即没有内存索引,另请参阅:http://en.wikipedia.org/wiki/Element_distinctness_problem
// Linear time
char computeMode(String input) {
// initialize currentMode to first char
char[] chars = input.toCharArray();
char currentMode = chars[0];
int currentModeCount = 0;
HashMap<Character, Integer> counts = new HashMap<Character, Integer>();
for(char character : chars) {
int count = putget(counts, character); // occurences so far
// test whether character should be the new currentMode
if(count > currentModeCount) { …
Run Code Online (Sandbox Code Playgroud) 我想在Java,Python和JavaScript中实现XorShift PRNG.给定相同的种子,不同的实现必须生成完全相同的序列.到目前为止,我还没能做到这一点.
我在Java中的实现
在Java中使用以下XorShift PRNG实现(其中x
是一个long
字段):
public long randomLong() {
x ^= (x << 21);
x ^= (x >>> 35);
x ^= (x << 4);
return x;
}
Run Code Online (Sandbox Code Playgroud)
如果我播种x
到1,前四个调用randomLong()
将生成:
35651601
1130297953386881
-9204155794254196429
144132848981442561
Run Code Online (Sandbox Code Playgroud)
我在Python中的实现
无论有没有numpy我都尝试过.下面是使用numpy的版本.
def randomLong(self):
self.x ^= np.left_shift(self.x, 21)
self.x ^= np.right_shift(self.x, 35)
self.x ^= np.left_shift(self.x, 4)
return self.x
Run Code Online (Sandbox Code Playgroud)
使用相同的种子,Python函数将生成:
35651601
1130297953386881
-9204155787274874573 # different
143006948545953793 # different
Run Code Online (Sandbox Code Playgroud)
我的JavaScript实现
我还没有尝试过,因为JavaScript的唯一数字类型似乎是基于IEEE 754的双打,这开启了不同的蠕虫病毒.
我认为原因是什么
Java和Python有不同的数字类型.Java有32位和64位整数,而Python有很时髦的大型int.
看起来移位运算符具有不同的语义.例如,在Java中有逻辑和算术移位,而在Python中只有一种移位(逻辑?).
问题
我很高兴能得到一个答案,让我用这三种语言写一个PRNG,而且速度很快.它不一定非常好.我已经考虑将C libs实现移植到其他语言,虽然它不是很好.
我已经读过有人建议使用Python的java.util.Random类的SO.我不想要这个,因为我也需要JavaScript中的函数,我不知道这个包存在于那里.
昨天在一次研讨会上,主持人(Peter Sestoft)展示了一个小型的java程序,有3个类,同时具有协方差和反差.尝试使用javac进行编译时,类型检查器将抛出StackOverflowException.
该片段是由一些在微软工作的人开发的(想想一个叫做肯尼迪).
无法使用Google找到它.有没有人知道代码片段,你可以在这里粘贴它(最多10行代码),供大家看吗?:)
这很有趣......
我正在对存储在S3中的一些LZO压缩日志文件运行EMR Spark作业.有几个日志文件存储在同一个文件夹中,例如:
...
s3://mylogfiles/2014-08-11-00111.lzo
s3://mylogfiles/2014-08-11-00112.lzo
...
Run Code Online (Sandbox Code Playgroud)
在spark-shell中,我正在运行一个计算文件中行数的作业.如果我为每个文件单独计算行数,则没有问题,例如:
// Works fine
...
sc.textFile("s3://mylogfiles/2014-08-11-00111.lzo").count()
sc.textFile("s3://mylogfiles/2014-08-11-00112.lzo").count()
...
Run Code Online (Sandbox Code Playgroud)
如果我使用通配符加载带有单行的所有文件,我会得到两种异常.
// One-liner throws exceptions
sc.textFile("s3://mylogfiles/*.lzo").count()
Run Code Online (Sandbox Code Playgroud)
例外情况是:
java.lang.InternalError: lzo1x_decompress_safe returned: -6
at com.hadoop.compression.lzo.LzoDecompressor.decompressBytesDirect(Native Method)
Run Code Online (Sandbox Code Playgroud)
和
java.io.IOException: Compressed length 1362309683 exceeds max block size 67108864 (probably corrupt file)
at com.hadoop.compression.lzo.LzopInputStream.getCompressedData(LzopInputStream.java:291)
Run Code Online (Sandbox Code Playgroud)
在我看来,解决方案是由最后一个例外给出的文字暗示,但我不知道如何继续.LZO文件允许的大小是有限制的,或者问题是什么?
我的问题是:我可以运行Spark查询加载S3文件夹中的所有LZO压缩文件,而不会获得与I/O相关的异常吗?
每个文件有66个大约200MB的文件.
编辑:只有在使用Hadoop2核心库(ami 3.1.0)运行Spark时才会出现异常.当使用Hadoop1核心库(ami 2.4.5)运行时,一切正常.两个案例都使用Spark 1.0.1进行了测试.
我使用Apache Spark ML(版本1.5.1)中的NaiveBayes分类器来预测一些文本类别。但是,分类器输出的标签与我的训练集中的标签不同。我做错了吗?
这是一个可以粘贴到例如Zeppelin笔记本的小例子:
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.NaiveBayes
import org.apache.spark.ml.feature.{HashingTF, Tokenizer}
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.sql.Row
// Prepare training documents from a list of (id, text, label) tuples.
val training = sqlContext.createDataFrame(Seq(
(0L, "X totally sucks :-(", 100.0),
(1L, "Today was kind of meh", 200.0),
(2L, "I'm so happy :-)", 300.0)
)).toDF("id", "text", "label")
// Configure an ML pipeline, which consists of three stages: tokenizer, hashingTF, and lr.
val tokenizer = new Tokenizer()
.setInputCol("text")
.setOutputCol("words")
val hashingTF …
Run Code Online (Sandbox Code Playgroud) scala machine-learning apache-spark naivebayes apache-spark-ml
假设一种多方加密方案,类似于以下答案:使用多个不同密钥加密?.那是.一组密钥K
可用于解密密文.
有没有办法到期:
K'? K
Run Code Online (Sandbox Code Playgroud)
这样K \ K'
仍然可以破译密文,但不再K'
?
我当然假设密文已经因为到期而更新了K'
.我不确定如何攻击它,或者它是否可能?
我已经创建了一个很大的(例如,4000 X 4000)numpy浮动矩阵.我正在通过浮点值对矩阵的单元格进行排序,从而生成(row,col,value)
元组列表.这是我的代码(简化):
def cells(matrix):
shape = np.shape(matrix)
for row in range(shape[0]):
for col in range(shape[1]):
yield (row, col, matrix[row,col])
# create a random matrix
matrix = np.random.randint(100, size=(4000,4000))
# sort the cells by value
sorted_cells = sorted(cells(matrix), key=lambda x: x[2])
Run Code Online (Sandbox Code Playgroud)
我知道,逐个单元格的产量是低效的,但我不知道如何(row, col, value)
使用纯粹的numpy 迭代矩阵的元组?也许那是真正的问题!
我目前的方法的问题是我的计算机在分拣步骤中完全死亡.
如果我这样做不是问题:sorted(matrix.flatten())
实际上工作正常,速度很快,但是我没有得到行和列...
我正在寻找类似于.NET托管扩展框架(http://mef.codeplex.com/)的Java功能。对于那些不了解MEF的人,我想要这样的东西:
给定接口
public interface IFoo {
...
}
Run Code Online (Sandbox Code Playgroud)
通过查看已加载的jar,动态加载接口的实现。
IFoo foo = loadClassThatImplementsInterface<IFoo>();
Run Code Online (Sandbox Code Playgroud)
关键是程序员在代码时不知道实现的名称,但在代码中提供了扩展点。
在Java中根本不可能吗?我发现一些Google命中说这是不可能的,但这似乎有点...是吗?
当在编译时知道实现的完全限定名称时,有许多使用类加载器的示例。那不是我想要的。
描述:在BODY以下某处是DIV,比方说<div id="keepme"></div>
应该保留.其他一切都应该是remove()
'ed.
你如何用jQuery做到这一点,即保留这个元素,删除正文下的其他所有内容.
java ×3
apache-spark ×2
javascript ×2
numpy ×2
python ×2
algorithm ×1
c#-4.0 ×1
classloader ×1
covariance ×1
cryptography ×1
dom ×1
dynamic ×1
fuzzy-search ×1
grep ×1
hadoop ×1
jquery ×1
linux ×1
lucene ×1
lzo ×1
manual ×1
methods ×1
mode ×1
naivebayes ×1
parameters ×1
random ×1
reflection ×1
scala ×1
stop-words ×1
typechecking ×1
wildcard ×1