什么是在存储效率方面更好或会对Android和SQLite的综合性能最好,获得与cursor.getCount(记录计数)或与普通的SQL子句的COUNT执行rawQuery(和使用cursor.getInt (0)以后得到的计数返回)?
注意:我没有使用结果,我只想要计数.
对于一个实验,我决定使用内置的程序编辑器将一个小游戏编程到我的TI-89中,但是我无法找到一种在没有明显延迟的情况下获得击键的最佳方法.目前我有:
Prgm
70?xpos
70?ypos
Loop
If getKey()=340 Then
xpos+3?xpos
PxlCrcl ypos,xpos,5,1
EndIf
If getKey()=337 Then
xpos-3?xpos
PxlCrcl ypos,xpos,5,1
EndIf
If getKey()=257 Then
Goto end
EndIf
EndLoop
Lbl end
EndPrgm
Run Code Online (Sandbox Code Playgroud)
这会创建一个无限的游戏循环,检查是否按下了左,右或删除按钮并相应地向左或向右绘制一个圆圈或完全结束程序.然而,这种方法似乎运行得非常缓慢,我在其他演示中看到了更平稳的运动.我的方法有问题吗?如果有,我怎样才能改进它?
为了提高内存效率,我一直在努力将我的一些代码从列表转换为生成器/迭代器。我发现了很多案例,我只是将我制作的列表转换为np.array带有代码模式的列表np.array(some_list)。
值得注意的是,some_list通常是一个迭代生成器的列表推导式。
我正在研究np.fromiter是否可以更直接地使用生成器(而不是首先将其转换为列表然后将其转换为 numpy 数组),但我注意到该np.fromiter函数与使用的任何其他数组创建例程不同现有数据需要指定dtype.
在我的大多数特定情况下,我可以完成这项工作(主要是处理对数似然,所以 float64 会很好),但它让我想知道为什么这只是fromiter数组创建者而不是其他数组创建者所必需的。
我的理解是,如果您知道dtype和count,它允许为结果预分配内存np.array,并且如果您不指定可选count参数,它将“按需调整输出数组的大小”。但是,如果您不指定计数,似乎您应该能够dtype像在正常np.array调用中一样即时推断出。
我可以看到这对于将数据重新转换为 new 很有用dtype,但这也适用于其他数组创建例程,并且似乎值得将其放置为可选但不是必需的参数。
那么为什么您需要指定dtype要使用的np.fromiter;或者换句话说,指定dtype数组是否要按需调整大小会带来什么好处?
与我的问题更直接相关的同一问题的更微妙版本:我知道np.ndarray当您不断调整 s 的大小时,它们的许多效率收益都会丢失,那么使用np.fromiter(generator,dtype=d)over np.fromiter([gen_elem for gen_elem in generator],dtype=d)over 有np.array([gen_elem for gen_elem in generator],dtype=d)什么好处?
哪一个更有效地实例化列表?
List<Type> list = new ArrayList<Type>(2);
list.add(new Type("one"));
list.add(new Type("two"));
Run Code Online (Sandbox Code Playgroud)
要么
List<Type> list = Arrays.asList(new Type("one"), new Type("two"));
Run Code Online (Sandbox Code Playgroud) 我很好奇无论解释性如何,以长格式还是宽格式存储数据是否更有效?我已经习惯于object.size()确定内存中的大小,但它们没有显着差异(长度在大小方面稍微有点效率)并且值仅是和估计值.
除了原始大小之外,我还想知道在建模时使用哪种格式更有效.
我有一个嵌入式系统(没有任何操作系统的MCU),最终用户应该能够定义系统的级别(比例:0-100)一年.作为一个例子(时间x天矩阵):
| 1st Jan | 2nd Jan | 3rd Jan | .. | 31 Dec |
00:30 | 40 (%) | 40 | 45 | .. | 50 |
01:48 | 48 | 47 | 55 | .. | 33 |
02:26 | 64 | 64 | 60 | .. | 68 |
.. | .. | .. | .. | .. | .. |
22:15 | 79 | 82 | 89 | .. | 100 |
23:37 | 100 …Run Code Online (Sandbox Code Playgroud) 我得到了以下代码,我被问到哪个选项获得以下模式:
XXXX-XXXX-XXXX-2324
...
代码如下:
public class CCMark {
public static String maskCC(String creditCard){
String x = "XXXX-XXXX-XXXX-";
//line 1
}
public static void main(String[] args) {
System.out.println(maskCC("1234-5678-1234-2324"));
System.out.println(maskCC("4567-5678-1234-5643"));
System.out.println(maskCC("1234-5678-1234-4654"));
System.out.println(maskCC("4567-5678-1234-5435"));
}
}
Run Code Online (Sandbox Code Playgroud)
下面可以插入"第1行"的可能选项:
A)
return x + creditCard.substring(15, 19);
B)
StringBuilder sb = new StringBuilder(x);
sb.append(creditCard, 15, 19);
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
我认为这里最好的选择,因为A和B为我们提供了相同的输出,是B,因为它使用的是StringBuilder,这意味着它的方法是可变的,因此它将使用比选项A更少的内存.
我错了吗?可能是这种特殊情况的选项A是最好的选择吗?
假设我有两个大小为 M1 和 M2 的 RDD,它们平均分布在 p 个分区中。
我很想知道(理论上/大约)操作过滤器、映射、leftOuterJoin、++、reduceByKey 等的成本是多少。
谢谢您的帮助。
performance processing-efficiency memory-efficient apache-spark rdd
当我们使用 DB API 2.0 获取数据时,cur.execute("select * from db.table")我们会得到一个游标,它看起来像元组列表的生成器对象。
而在 pymongo 中,当我们获取时,我们将其作为字典列表获取。我想实现这样的目标。
我不需要获取元组列表,而是想要字典列表或命名元组。
我相信从效率的角度来看这是有意义的,因为模式已经定义,所以不需要为每条记录发送它。
目前我正在使用的解决方法是:
cur.execute("select * from db.table")
columns = cur.columns_with_types
data = cur.fetchall()
df = pd.DataFrame(data,columns=[tuple[0] for tuple in columns])
data_reqd = df.to_dict('records')
Run Code Online (Sandbox Code Playgroud)
当查询返回大量数据时,此方法的公平性很差。
解决方法 1:使用fetchmany(size=block_size),但它似乎不是一种优雅的做事方式。
解决方法 2:这似乎是一种更好的处理方式。
cur.execute("select * from db.table")
columns = cur.columns_with_types
for tup in cur:
row = dict(zip(columns, tup))
# use row
Run Code Online (Sandbox Code Playgroud)
有什么好的办法处理这个问题吗?对问题的任何改进表示赞赏。
我有一个关于数据集中两个字符串的子字符串之间非常快速有效的比较的问题,尽管机器非常强大,但它的运行速度不够快。我有data.table2 列和大约 15 亿行,其结构如下:
library(data.table)
library(stringr)
library(stringi)
library(stringdist)
dt <- data.frame(c("002134", "024345", "176234"), c("002003", "024234", "002004"))
colnames(dt) <- c("class1", "class2")
setDT(dt)
Run Code Online (Sandbox Code Playgroud)
我想要的是一个函数,它 (1) 从两个向量的每个字符串中逐行提取前 3 位数字,(2) 比较两个向量之间的子字符串,(3) 创建一个新的布尔变量来报告两个子字符串是否相同是否相等。
所以想要的结果如下:
dt$sameclass <- c(TRUE, TRUE, FALSE)
print(dt)
class1 class2 sameclass
1: 002134 002003 TRUE
2: 024345 024234 TRUE
3: 176234 002004 FALSE
Run Code Online (Sandbox Code Playgroud)
我已经尝试过stringr和的版本,stringi无论是在data.table功能内还是在功能外。为了比较我使用的子字符串stringdist,因为据我了解可以并行化,这对我的服务器非常有益。然而,瓶颈似乎仍然是子串提取。
#stringi + stringdist without data.table:
dt$redclass1 <- stri_sub(dt$class1, to = 3)
dt$redclass2 <- stri_sub(dt$class2, to = 3)
dt[, classdist …Run Code Online (Sandbox Code Playgroud) memory-efficient ×10
performance ×2
python ×2
r ×2
string ×2
algorithm ×1
android ×1
apache-spark ×1
arraylist ×1
arrays ×1
c ×1
clickhouse ×1
collections ×1
cursor ×1
dataframe ×1
generator ×1
input ×1
java ×1
java-8 ×1
list ×1
matrix ×1
memory ×1
numpy ×1
optimization ×1
rdd ×1
sqlite ×1
stringdist ×1
substring ×1
ti-basic ×1