我有一个计算项目,大量使用日志函数(对于整数),数十亿的调用.我发现numpy的日志性能出乎意料地慢了.
以下代码需要15到17秒才能完成:
import numpy as np
import time
t1 = time.time()
for i in range(1,10000000):
np.log(i)
t2 = time.time()
print(t2 - t1)
Run Code Online (Sandbox Code Playgroud)
但是,math.log函数从3到4秒的时间要少得多.
import math
import time
t1 = time.time()
for i in range(1,10000000):
math.log(i)
t2 = time.time()
print(t2 - t1)
Run Code Online (Sandbox Code Playgroud)
我还测试了matlab和C#,它们分别需要大约2秒和0.3秒.
MATLAB
tic
for i = 1:10000000
log(i);
end
toc
Run Code Online (Sandbox Code Playgroud)
C#
var t = DateTime.Now;
for (int i = 1; i < 10000000; ++i)
Math.Log(i);
Console.WriteLine((DateTime.Now - t).TotalSeconds);
Run Code Online (Sandbox Code Playgroud)
在python中有什么办法可以提高日志功能的性能吗?
这是我试图编译和安装的 python 包的链接。我已经尝试了几个小时可以在网上找到的东西,但无法克服ImportError
.
包装内有以下内容。
它的 setup.py 有以下内容。这里有两个模块。一个是python封装包sparse_learning
,另一种是名为AC扩展模块proj_module
。
我按照此处描述的步骤https://docs.python.org/3.6/extending/building.html在 Ubuntu 18.04 上编译和安装。没有错误信息。
须藤 python3 setup.py build_ext --inplace
须藤 python3 setup.py 安装
然后,当我尝试加载 C 扩展模块时proj_module
,会出现错误“ImportError:动态模块未定义模块导出功能”。
python3 -c "导入 proj_module"
我尝试应用在线找到的解决方案,包括使用 卸载 Python2 sudo apt purge python2.7-minimal
,或将 python3 站点包路径添加到 bashrc。然而,他们都没有工作。
我只知道它最初是为 Python 2 编写的。然后对其进行了两次修改main_wrapper.c
,以便为 Python 3 运行。它们在我看来是正确的......
您有一个数组A,并且您希望将其中的每个值作为绝对值.问题是
numpy.abs(A)
Run Code Online (Sandbox Code Playgroud)
创建一个新矩阵,A中的值保持原样.我找到两种方法来将绝对值设置回A
A *= numpy.sign(A)
Run Code Online (Sandbox Code Playgroud)
要么
A[:] = numpy.abs(A)
Run Code Online (Sandbox Code Playgroud)
题:
有更有效的方法来执行此任务吗?
例如,如果我有一个 2D 张量 X,我可以对 X[:,1:]; 进行切片。如果我有一个 3D 张量 Y,那么我可以对像 Y[:,:,1:] 这样的最后一个维度进行类似的切片。
当给定未知维度的张量 Z 时,进行切片的正确方法是什么?一个numpy数组怎么样?
谢谢!
我将PyCharm用作python的IDE,当您绘制绘图时(使用 pyplot.plot(...),pyplot.show()相同的代码)pycharm将其显示在其IDE中。但是,这看起来像是静态图像。放大时,图开始模糊。
在其他IDE中,pyplot创建一个交互式绘图。放大时,基本上可以重新绘制曲线。您还可以拖动绘图。无论如何,在PyCharm中我可以从pyplot获得交互式绘图吗?
使用以下一列数据框,
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('test').getOrCreate()
df = spark.createDataFrame([[1],[2],[3],[4],[5]])
df.show()
+---+
| _1|
+---+
| 1|
| 2|
| 3|
| 4|
| 5|
+---+
Run Code Online (Sandbox Code Playgroud)
使用 rdd 的直方图函数计算直方图。
df.rdd.histogram(2)
Run Code Online (Sandbox Code Playgroud)
然后我收到一个错误:无法在 RDD 中生成非数字的桶。我很困惑,因为我的数据框中的所有值都是数字。
例如,如果
A = [7,8,1,1,2,2,2]; % the bins (or subscripts)
B = [2,1,1,1,1,1,2]; % the array
Run Code Online (Sandbox Code Playgroud)
然后所需的功能"binsum"有两个输出,一个是箱子,另一个是总和.它只是根据A中的下标在B中添加值.例如,对于2,总和是1 + 1 + 2 = 4,对于1,它是1 + 1 = 2.
[bins, sums] = binsum(A,B);
bins = [1,2,7,8]
sums = [2,4,2,1]
Run Code Online (Sandbox Code Playgroud)
"箱"中的元素不需要排序,但必须与"总和"中的元素相对应.这肯定可以通过"for"迭代来完成,但是不希望"for"迭代,因为存在性能问题.最好是为此建立功能.
非常感谢!
给定一个矩阵 A,我想对 A 的不同行应用不同的随机洗牌;例如,
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
变成
array([[1, 3, 2],
[6, 5, 4],
[7, 9, 8]])
Run Code Online (Sandbox Code Playgroud)
当然我们可以循环矩阵,让每一行随机打乱;然而迭代很慢,我问是否有更有效的方法来做到这一点。
例如,假设我们有
a = zeros((5,5))
Run Code Online (Sandbox Code Playgroud)
然后我想同时将位置(1,2),(3,4),(0,3)的元素设置为1,2,3,但以下方法不起作用,
# I expect this to be the same as a[(1,2)] = 1, a[(3,4)] = 2, a[(0,3)] = 3
a[[(1,2),(3,4),(0,3)]] = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
它会抱怨"阵列的索引太多".我不想涉及效率问题的for循环(真正的问题是一个大矩阵,我需要在该矩阵中设置或获取具有一长串随机生成的索引的元素).
首先,定义一个树节点,其中“ BFSTraversal
呼吸优先”搜索ReconstructBFS
是根据“宽度优先”搜索序列构造一棵树。
template<typename T>
struct TreeNode
{
T val;
TreeNode *left;
TreeNode *right;
explicit TreeNode(T x) : val(x), left(nullptr), right(nullptr)
{}
static void BFSTraversal(TreeNode *node, void visit(T));
static TreeNode<T> *ReconstructBFS(vector<T> &seq);
};
Run Code Online (Sandbox Code Playgroud)
然后重载<<
运算符,这将导致我不理解的编译器错误。我的lambda函数有问题吗?
template<typename T>
ostream &operator<<(ostream &os, TreeNode<T> *node)
{
void (*visit)(T) = [&os](T v) -> void
{ os << v << ','; };
// compiler error
// cannot convert 'operator<<(std::ostream&, TreeNode<T>*)
// [with T = int; std::ostream = std::basic_ostream<char>]::<lambda(int)>' …
Run Code Online (Sandbox Code Playgroud) 简单的问题:假设我们
import pyspark.sql.functions as F
Run Code Online (Sandbox Code Playgroud)
那么如何从 pyspark.sql.column.Column object 恢复列名字符串 'a' F.col('a')
。
例如,如果我们输入str(F.col('a'))
,我们有
而不是原始的列名称“a”。
python ×6
numpy ×5
apache-spark ×2
arrays ×2
matlab ×2
pyspark ×2
c# ×1
c++ ×1
c++11 ×1
histogram ×1
matplotlib ×1
performance ×1
pycharm ×1
python-3.x ×1
pytorch ×1
random ×1
sum ×1
templates ×1
tensor ×1