小编Ton*_*ony的帖子

在numpy的日志功能中会发生什么?有没有办法改善表现?

我有一个计算项目,大量使用日志函数(对于整数),数十亿的调用.我发现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中有什么办法可以提高日志功能的性能吗?

c# python performance matlab numpy

8
推荐指数
1
解决办法
573
查看次数

无法解决“导入错误:动态模块未定义模块导出功能”

这是我试图编译和安装的 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 运行。它们在我看来是正确的......

添加: 在此处输入图片说明

更改: 在此处输入图片说明

python python-3.x

8
推荐指数
3
解决办法
1万
查看次数

Numpy设定了绝对值

您有一个数组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)

根据时间测试,他们的表现几乎相同 在此输入图像描述

题:

有更有效的方法来执行此任务吗?

python arrays numpy

6
推荐指数
1
解决办法
363
查看次数

如何索引/切片未知维度的 PyTorch 张量/numpy 数组的最后一个维度

例如,如果我有一个 2D 张量 X,我可以对 X[:,1:]; 进行切片。如果我有一个 3D 张量 Y,那么我可以对像 Y[:,:,1:] 这样的最后一个维度进行类似的切片。

当给定未知维度的张量 Z 时,进行切片的正确方法是什么?一个numpy数组怎么样?

谢谢!

numpy pytorch tensor

6
推荐指数
1
解决办法
2457
查看次数

使用pycharm时如何获取pyplot的交互式图

我将PyCharm用作python的IDE,当您绘制绘图时(使用 pyplot.plot(...),pyplot.show()相同的代码)pycharm将其显示在其IDE中。但是,这看起来像是静态图像。放大时,图开始模糊。

在其他IDE中,pyplot创建一个交互式绘图。放大时,基本上可以重新绘制曲线。您还可以拖动绘图。无论如何,在PyCharm中我可以从pyplot获得交互式绘图吗?

在此处输入图片说明 在此处输入图片说明

python matplotlib pycharm

5
推荐指数
1
解决办法
911
查看次数

rdd.histogram 给出“无法在 RDD 中生成非数字的桶”错误

使用以下一列数据框,

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 中生成非数字的桶。我很困惑,因为我的数据框中的所有值都是数字。

在此处输入图片说明

apache-spark pyspark

5
推荐指数
1
解决办法
783
查看次数

有没有办法让matlab根据指定的bin对数组进行求和而不是迭代?如果有建立功能,那就最好了

例如,如果

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"迭代,因为存在性能问题.最好是为此建立功能.

非常感谢!

matlab sum histogram

4
推荐指数
2
解决办法
39
查看次数

为 2D NumPy 数组的每一行高效应用不同的排列

给定一个矩阵 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)

当然我们可以循环矩阵,让每一行随机打乱;然而迭代很慢,我问是否有更有效的方法来做到这一点。

python arrays random numpy

3
推荐指数
1
解决办法
1346
查看次数

如何在没有for-loop的情况下通过多个索引在numpy矩阵中获取/设置元素?

例如,假设我们有

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循环(真正的问题是一个大矩阵,我需要在该矩阵中设置或获取具有一长串随机生成的索引的元素).

python numpy

2
推荐指数
1
解决办法
89
查看次数

编译器给出lambda函数强制转换错误

首先,定义一个树节点,其中“ 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)

c++ templates c++11

1
推荐指数
1
解决办法
52
查看次数

如何从 F.col 对象恢复列名?

简单的问题:假设我们

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”。

apache-spark pyspark

1
推荐指数
1
解决办法
503
查看次数