我以为我理解默认方法对哈希的作用...
如果密钥不存在,请为其提供默认值:
irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = 4
=> 4
irb(main):003:0> a[8]
=> 4
irb(main):004:0> a[9] += 1
=> 5
irb(main):005:0> a
=> {9=>5}
Run Code Online (Sandbox Code Playgroud)
都好.
但是,如果我设置的默认是一个空列表,或空哈希,我不知道这是在行为都 ....
irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = []
=> []
irb(main):003:0> a[8] << 9
=> [9] # great!
irb(main):004:0> a
=> {} # ?! would have expected {8=>[9]}
irb(main):005:0> a[8]
=> [9] # awesome!
irb(main):006:0> a[9]
=> [9] # unawesome! shouldn't this be [] ??
Run Code Online (Sandbox Code Playgroud)
我希望/期待相同的行为,好像我使用了|| …
我有一个非常简单的输入管道,from_generator非常适合......
dataset = tf.data.Dataset.from_generator(complex_img_label_generator,
(tf.int32, tf.string))
dataset = dataset.batch(64)
iter = dataset.make_one_shot_iterator()
imgs, labels = iter.get_next()
Run Code Online (Sandbox Code Playgroud)
其中complex_img_label_generator动态生成图像,并返回表示一个numpy的阵列(H, W, 3)图像和一个简单的string标签.处理不是我可以表示从文件和tf.image操作中读取的内容.
我的问题是关于如何平衡发电机?我如何让N个这些生成器在自己的线程中运行.
一个想法是使用dataset.map与num_parallel_calls处理线程; 但是地图在张量上运行......另一个想法是创建多个生成器,每个生成器都有自己的,prefetch并以某种方式加入它们,但我看不出我如何加入N个生成器流?
我可以遵循任何规范的例子吗?
我有一段聚合代码,运行得很好,但对10e6行的数据帧运行有点慢.我不是那种经验丰富的R,所以为我那令人畏缩的代码道歉!
我只是想做一个基本的汇总和共同键的值的总和...
例如从...来
key val
1 a 5
2 b 7
3 a 6
Run Code Online (Sandbox Code Playgroud)
至...
key val
1 a 11
2 b 7
Run Code Online (Sandbox Code Playgroud)
我能管理的最好的是......
keys = unique(inp$key)
vals = sapply(keys, function(x) { sum(inp[inp$key==x,]$val) })
out = data.frame(key=keys, val=vals)
Run Code Online (Sandbox Code Playgroud)
我有这种直觉,认为这inp[inp$key==x,]不是最好的方法.是否有明显的加速我错过了?我可以在Hadoop中做到这一点(因为10e6数据集实际上已经是来自2e9行数据集的汇总)但我正在尝试改进我的R.
干杯,垫子
给定点之间的距离矩阵是否存在用于确定具有这些距离的一组n维点的算法?(或至少最小化错误)
有点像收费公路问题的n维版本.
我能想到的最好的就是使用多维缩放.
我有两个分数列表;
说 A = [ 1/212, 5/212, 3/212, ... ]
和B = [ 4/143, 7/143, 2/143, ... ].
如果我们定义A' = a[0] * a[1] * a[2] * ...和B' = b[0] * b[1] * b[2] * ...
我想计算A'和B'的归一化值
即特别是A' / (A'+B')和 的值B' / (A'+B')
我的麻烦是A是B都很长,每个值都很小所以计算产品会导致数值下溢很快...
我理解通过对数将产品转化为总和可以帮助我确定A'或B'中哪一个更大
即 max( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
并且使用日志我可以计算出值,A' / B'但我该怎么做A' / A'+B'
我迄今为止最好的选择是将数字表示保持为分数,即A = [ [1,212], [5,212], [3,212], ... ]实现我自己的算术,但它变得笨拙而且我感觉有一种(简单的)对数方式我只是缺少了....
A和B的分子不是来自序列.对于这个问题,它们也可能是随机的.如果它有助于分母中A的所有值都相同,那么B的所有分母都是如此.
欢迎任何想法!
(ps.我在24小时前问了一个关于这个比例的类似问题, …
鉴于简单A/B测试的结果......
A B
clicked 8 60
ignored 192 1940
Run Code Online (Sandbox Code Playgroud)
(即A 4%和B 3%的谈话率)
... R中的一项费希尔测试表明,没有显着差异
> fisher.test(data.frame(A=c(8,192), B=c(60,1940)))
...
p-value = 0.3933
...
Run Code Online (Sandbox Code Playgroud)
但是R中有哪些功能可以告诉我需要增加样本量以达到0.05的p值?
我可以增加A值(按比例)直到我达到它但是必须有更好的方法吗?也许pwr.2p2n.test [1]在某种程度上可用?
[1] http://rss.acs.unt.edu/Rdoc/library/pwr/html/pwr.2p2n.test.html
我们可以time在unix环境中使用,看看有多长时间......
shell> time some_random_command
real 0m0.709s
user 0m0.008s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)
是否有相应的记录进程的内存使用?
特别是我对峰值分配感兴趣.
我正在做一些关于常见爬网数据集(大型网络爬网)的工作,我一直看到一个奇怪的编码模式,我无法解决如何处理.
我一次又一次看到的模式类似于我猜测的字节序列.50 6f 6b e9 6d 6f 6ePokémon
现在编码模式是不是我的最强点,但我不知道任何编码它是合法代表的é是公正e9.
这有点像[UTF-16] [1] fe ff 00 50 00 6f 00 6b 00 e9 00 6d 00 6f 00 6e
它绝对不是UTF-8 50 6f 6b c3 a9 6d 6f 6e
所以我只是用Java的方法将这些字节解码成一个字符串,一个库是理想的.
new String(bytes)理所当然地不起作用并正确地将其转换e9为替代品ef bf bd(又名可怕的 )
有关如何处理这些的任何想法?
更新
我最终使用了Apache Tika [2]中提供的字符集编码检测器.效果很好.
[1] http://www.fileformat.info/info/unicode/char/e9/index.htm
[2] http://tika.apache.org/0.8/api/org/apache/tika/parser/txt/CharsetDetector.html
从data.frame开始......
df = data.frame(k=c(1,5,4,7,6), v=c(3,1,4,1,5))
> df
k v
1 1 3
2 5 1
3 4 4
4 7 1
5 6 5
Run Code Online (Sandbox Code Playgroud)
我可能会进行一些任意操作......
> foo1 = df[df$k>3,]
> foo2 = head(foo1[order(foo1$v),], 2)
> foo2
k v
2 5 1
4 7 1
Run Code Online (Sandbox Code Playgroud)
此时foo2以某种方式保留了原始行号df(在本例中为2和4).
我该如何提取这些?
> insert_magic_function_here(foo2)
[1] 2 4
Run Code Online (Sandbox Code Playgroud) 我有一个类似的HDFS结构
a/b/file1.gz
a/b/file2.gz
a/c/file3.gz
a/c/file4.gz
Run Code Online (Sandbox Code Playgroud)
我使用的是经典模式
FileInputFormat.addInputPaths(conf, args[0]);
Run Code Online (Sandbox Code Playgroud)
设置我的Java映射减少作业的输入路径。
如果我将args [0]指定为a / b,则效果很好,但如果仅指定a(我的意图是要处理所有4个文件),它将失败
错误是
Exception in thread "main" java.io.IOException: Not a file: hdfs://host:9000/user/hadoop/a
Run Code Online (Sandbox Code Playgroud)
如何将所有内容递归添加到?
我一定错过了一些简单的事情...