我正在测试HTML5画布并使用Javascript来绘制支持触控的设备.虽然我在iOS设备上工作但我无法在Android上使用它.我把它缩小到event.pageX没有返回坐标,而是返回0或未定义(基于浏览器).
我在Opera Mobile和Dolphin浏览器上运行Cyanogen 7.1的手机上测试了它,并在运行标准浏览器的Galaxy Tab 10.1(Android 3.1)上进行了测试.
我修改了代码,在touchstart事件上显示警告,显示event.pageX,event.layerX和event.clientX坐标(我知道clientX应该只能在iOS上运行).
canvas.addEventListener('touchstart', function(e) {
if (readyToDraw){
alert("PageX: "+e.pageX+","+e.pageY+"\n LayerX: "+e.layerX+","+e.layerY+"\n + clientX: "+e.clientX+","+e.clientY);
// prevent the browsers default action!
e.preventDefault();
paint = true;
// Get coordinates
var c = getCoords(e);
addClick(c.x, c.y, false);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经在iOS中使用完整的绘图,但甚至无法让Android注册坐标,任何想法?
最终编辑:我解决了问题,看到了接受的答案.
我有一个简单的Swing GUI,JButton在带有触摸屏的Surface平板电脑上运行.按钮有ActionListeners.从鼠标单击这些按钮时,它们会在视觉上正确按下.然而,当他们在触摸屏上轻敲时,它们在视觉上保持相同但仍然会触发actionPerformed().如果他们是双击,那么他们在视觉上正确压下但是开火2 actionPerformed()秒.
是否有一种方法可以在按下按钮时进行此按钮动画更改,而不是单击?我已经对它进行了测试,我可以使用MouseListener并放入所有逻辑,mouseClicked()但要求触摸屏用户双击按钮并不是很优雅.
我有一个简单的类结构建模离散模拟,带有状态向量,每个状态包含许多过渡,作为智能指针的向量.我已经使用智能指针来保存转换,就像在我的完整应用程序中我需要多态性一样.
#include <vector>
#include <memory>
class Transition {
public:
Transition() {}
};
class State {
public:
State(int num) : num(num), transitions() {}
void add_transition(std::unique_ptr<Transition> trans) {
transitions.push_back(std::move(trans));
}
private:
int num;
std::vector<std::unique_ptr<Transition>> transitions;
};
int main() {
std::vector<State> states;
for (int i = 0; i < 10; i++) {
State nstate = State(i);
for (int j = 0; j < 2; j++) {
nstate.add_transition(std::move(std::unique_ptr<Transition>(new Transition())));
}
// This line causes compiler errors
states.push_back(nstate);
}
}
Run Code Online (Sandbox Code Playgroud)
将新状态对象添加到向量时,我遇到编译器错误:
Error: use of deleted …Run Code Online (Sandbox Code Playgroud) 我有一个二叉树,节点与数据交互.我最初实现了标准的邮政订单递归遍历.
def visit_rec(self, node, data):
if node:
self.visit_rec(node.left, data)
self.visit_rec(node.right, data)
node.do_stuff(data)
Run Code Online (Sandbox Code Playgroud)
我认为我可以通过使用生成器来改进它,以便我可以使用相同的遍历方法用于其他用途,而不必不断地传递相同的数据.该实现如下所示.
def visit_rec_gen(self, node):
if node:
for n in self.visit_rec_gen(node.left):
yield n
for n in self.visit_rec_gen(node.right):
yield n
yield node
for node in self.visit_rec_gen():
node.do_stuff(data)
Run Code Online (Sandbox Code Playgroud)
然而,这比以前的版本(~50s到~17s)慢得多,并且使用了更多的内存.我的发电机功能版本有错吗?我更喜欢使用这种方法,但不是以牺牲性能为代价.
编辑:我最初应该提到的一点是,这些结果是在PyPy 2.3.1下获得的,而不是标准的CPython.
在ggplot2中是否有办法根据点的密度生成具有不同alpha的geom_ribbon(或其他基于区域的geom)?
以下代码产生50个嘈杂的正弦波,每个样本具有随机x值.我不想绘制每一点,因为我可能想要一千个或更多的重新采样,所以我想总结所有这些要点.
一种简单的方法是绘制一个覆盖95%分位数的geom_ribbon.然而,首先,这并不容易计算,因为每个重采样的x值不相同; 通常你会计算每100个点的逐点分位数.
相反,我希望有一个色带覆盖样品所在的整个区域,具有连续的α梯度,即色带在实际线附近的中间最暗,在离群点处非常浅.这可能在ggplot2中吗?
library(ggplot2)
num_points = 100
num_samples = 50
x = seq(0, 4*pi, length.out=num_points)
sim <- lapply(1:num_samples, function(f) {
x = runif(num_points, 0, 4*pi)
y = sin(x) + rnorm(num_points, 0, 0.4)
data.frame(x=x, y=y)
})
sim.df <- do.call(rbind, sim)
actual = data.frame(x=x, y=sin(x))
ggplot(sim.df, aes(x=x, y=y)) +
geom_point(alpha=0.7) +
geom_line(data=actual, colour='blue', size=1.5)
Run Code Online (Sandbox Code Playgroud)
与如何file.edit('foo.R')在RStudio中打开文件进行编辑的方式类似,如果您知道R项目的位置,是否可以打开R项目.Rproj?
我注意到在PyPy和Python下运行的程序的内存使用有些奇怪.在PyPy下,该程序不仅使用比CPython大得多的初始内存量,而且这种内存使用量也会随着时间的推移而显着增加.在PyPy下的程序结束时,它使用大约170MB,而在CPython下运行则为14MB.
我找到了一个具有完全相同问题的用户,尽管规模较小,但是对他有用的解决方案只为我的程序提供了一点帮助pypy内存使用量会永远增长吗? 我尝试更改的两件事是将环境变量PYPY_GC_MAX设置为100MB,将PYPY_GC_GROWTH设置为1.1,并在每一代手动调用gc.collect().
我正在确定内存使用情况
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1000
Run Code Online (Sandbox Code Playgroud)
这是不同条件下的运行时和内存使用情况:
Version: time taken, memory used at end of run
PyPy 2.5.0: 100s, 173MB
PyPy with PYPY_GC_MAX = 100MB and PYPY_GC_GROWTH = 1.1: 102s, 178MB
PyPy with gc.collect(): 108s, 131MB
Python 2.7.3: 167s, 14MB
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,程序在PyPy下比CPython快得多,这就是为什么我首先转向它,但代价是内存增加了10倍.
该程序是遗传编程的一个实现,我正在发展一个超过100代的算术二叉树,人口中有200个人.树中的每个节点都有对其2个孩子的引用,这些树的大小可以增加,尽管在这个实验中它们保持相对稳定.根据应用程序,该程序可以运行10分钟到几个小时,但是对于结果,我将其设置为较小的数据集以突出显示该问题.
有没有人有任何想法a)可能导致这种情况的原因,以及b)是否可以将内存使用限制在更可敬的水平?
我有一个填充了包含多个点的字符串的列.我想将此列拆分为两个包含第一个点之前和之后的两个子串.
即
comb num
UWEA.n.49.sp 3
KYFZ.n.89.kr 5
...
Run Code Online (Sandbox Code Playgroud)
成
a b num
UWEA n.49.sp 3
KYFZ n.89.kr 5
...
Run Code Online (Sandbox Code Playgroud)
我正在使用separate函数,tidyr但无法正确使用正则表达式.我试图使用这个答案的正则表达式:
foo %>%
separate(comb, into=c('a', 'b'),
sep="([^.]+)\\.(.*)")
Run Code Online (Sandbox Code Playgroud)
因此,该列a应该由([^.]+)包含至少一个非点字符的第一个捕获组确定,然后是第一个点,然后第二个捕获组将(.*)匹配后面的任何剩余字符.
然而,这似乎不匹配任何东西:
a b num
3
5
Run Code Online (Sandbox Code Playgroud)
这是我的虚拟数据集:
library(dplyr)
library(tidyr)
foo <- data.frame(comb=replicate(10,
paste(paste(sample(LETTERS, 4), collapse=''),
sample(c('p', 'n'), 1),
sample(1:100, 1),
paste(sample(letters, 2), collapse=''),
sep='.')
),
num = sample(1:10, 10, replace=T))
Run Code Online (Sandbox Code Playgroud) 假设您有狗,猫,猪等类......所有这些都是从动物继承的,那么随机初始化它的最佳方法是什么?
即一个基本的方法是有一个元组,从中选择一个项目,然后创建所选值的实例.
animals = ('dog', 'cat', 'pig'...)
choice = random.choice(animals)
if choice == 'dog':
new_animal = Dog()
elif choice == 'cat':
new_animal = Cat()
...
Run Code Online (Sandbox Code Playgroud)
但显然这是非常低效的,如何实现这种行为最好?
在相关的说明中,如果您要求用户输入(stdin,textfile等)他们想要的动物,那么您将如何实例化正确的动物呢?再一个丑陋的方式,这将是一个很大的if,elif语句如上所述.
如果你有一个100个值的列表,你希望以2:1:1的比例将其子集化为3,那么在Python中最简单的方法是什么?
我目前的解决方案是为每个子集取一个索引样本,然后从原始列表中删除这些值,即
my_list = [....]
num_A = 50
subset_A = []
num_B = 25
subset_B = []
num_C = 25
subset_C = []
a_indices = random.sample(xrange(len(my_list)), num_A)
for i in sorted(a_indices, reverse=True): # Otherwise can get index out of range
subset_A.append(my_list.pop(i))
b_indices = random.sample(xrange(len(my_list)), num_B)
for i in sorted(b_indices, reverse=True): # Otherwise can get index out of range
subset_B.append(my_list.pop(i))
subset_C = my_list[:]
assert len(subset_C) == num_C
Run Code Online (Sandbox Code Playgroud)
但是我确信有比这更优雅的解决方案.