我知道列表理解会做到这一点,但我想知道是否有更短(和更多Pythonic?)的方法.
我想创建一系列不同长度的列表.每个列表将包含相同的元素e,重复n次(其中n =列表的长度).如何创建列表,而不做
__PRE__
对于每个清单?
我看到在使用了一个有趣的技术,答案到另一个问题,并想好一点理解.
我们给出了一个无符号的64位整数,我们对以下几位感兴趣:
1.......2.......3.......4.......5.......6.......7.......8.......
Run Code Online (Sandbox Code Playgroud)
具体来说,我们希望将它们移到前八位,如下所示:
12345678........................................................
Run Code Online (Sandbox Code Playgroud)
我们不关心指示的位的值.
,并且不必保留它们.
该溶液是屏蔽掉不需要的位,并且乘以结果0x2040810204081
.事实证明,这就是诀窍.
这种方法有多普遍?这种技术可以用来提取任何比特子集吗?如果不是,如何判断该方法是否适用于特定的位组?
最后,如何找到(a?)正确的乘数来提取给定的位?
例如,可以使用位运算符来实现乘法和除法
i*2 = i<<1
i*3 = (i<<1) + i;
i*10 = (i<<3) + (i<<1)
Run Code Online (Sandbox Code Playgroud)
等等.
实际上使用say (i<<3)+(i<<1)
乘以10比i*10
直接使用更快吗?是否有任何类型的输入不能以这种方式倍增或分割?
我需要编写一个函数,它接受一个数字列表并将它们相乘.例子:
[1,2,3,4,5,6]
会给我1*2*3*4*5*6
.我真的可以使用你的帮助.
如何仅使用位移和加法进行乘法和除法?
我正在优化一个函数,我想摆脱缓慢的for循环.我正在寻找一种更快的方法来将矩阵的每一行乘以一个向量.
有任何想法吗?
编辑:
我不是在寻找'经典'乘法.
例如.我有一个有23列和25行的矩阵和一个长度为23的向量.结果我想要矩阵25x23,每行乘以向量.
我正在寻找一种有效(可选的标准,优雅且易于实现)的解决方案来乘以相对较大的数字,并将结果存储为一个或多个整数:
假设我有两个64位整数,如下所示:
uint64_t a = xxx, b = yyy;
Run Code Online (Sandbox Code Playgroud)
当我这样做时a * b
,如何检测操作是否导致溢出,并且在这种情况下将进位存储在某处?
请注意,我不想使用任何大号库,因为我对存储数字的方式有限制.
S = [22, 33, 45.6, 21.6, 51.8]
P = 2.45
Run Code Online (Sandbox Code Playgroud)
这里S是一个数组
我将如何乘以此值并得到值?
SP = [53.9, 80.85, 111.72, 52.92, 126.91]
Run Code Online (Sandbox Code Playgroud) 您好,我想将列表中的整数相乘.
例如;
l = [1, 2, 3]
l = [1*2, 2*2, 3*2]
Run Code Online (Sandbox Code Playgroud)
输出:
l = [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
所以我在网上搜索,大多数答案是关于将所有整数相互乘以,例如:
[1*2*3]
我经常听到这种说法,现代硬件上的乘法是如此优化,以至于它实际上与加法相同.真的吗?
我从来没有得到任何权威的确认.我自己的研究只会增加问题.速度测试通常会显示让我感到困惑的数据.这是一个例子:
#include <stdio.h>
#include <sys/time.h>
unsigned int time1000() {
timeval val;
gettimeofday(&val, 0);
val.tv_sec &= 0xffff;
return val.tv_sec * 1000 + val.tv_usec / 1000;
}
int main() {
unsigned int sum = 1, T = time1000();
for (int i = 1; i < 100000000; i++) {
sum += i + (i+1); sum++;
}
printf("%u %u\n", time1000() - T, sum);
sum = 1;
T = time1000();
for (int i = 1; i < 100000000; i++) {
sum += i * …
Run Code Online (Sandbox Code Playgroud)