小编Jos*_*del的帖子

以编程方式/动态导入Julia中的模块

我想知道是否有办法以编程方式或动态地将一组模块导入Julia?例如,如果我有一个符合启动时存在的某些命名约定的文件列表,我可以使用以下内容获取:

module_files = filter(r"^mod[0-9][0-9].jl$", readdir())
Run Code Online (Sandbox Code Playgroud)

可能会返回一个文件列表["mod00.jl", "mod02.jl", "mod05.jl"],有没有办法导入这些文件中的每个模块.这相当于:

import mod00
import mod02
import mod05
Run Code Online (Sandbox Code Playgroud)

如果我在编写代码时知道那些模块可用,那么在代码中.或者也许还有其他一些方法可以做得更好.任何建议将不胜感激.

更新

我试图通过宏来做到这一点,但没有运气.例如:

macro import_mod(modn)
    quote
        import $modn
    end
end

function test_mimport()
    module_files = filter(r"^mod[0-9][0-9].jl$", readdir())
    println(module_files)
    for modname in factor_files
        modn = modname[1:end-3]
        println(modn)
        @import_mod modn
    end
end
Run Code Online (Sandbox Code Playgroud)

当我跑这个时,我明白了ERROR: syntax: invalid "import" statement.我尝试了各种逃避策略,但都失败了.

julia

12
推荐指数
2
解决办法
848
查看次数

高效数学运算使用cython在python中的小数组

我使用numpexpr在大型数组上进行快速数学运算,但如果数组的大小小于CPU缓存,则使用简单数组数学在Cython中编写代码会更快,尤其是如果多次调用该函数.

问题是,你如何在Cython中使用数组,或者更明确地说:在Cython中是否有Python的array.array类型的直接接口?我想做的是这样的事(简单例子)

cpdef array[double] running_sum(array[double] arr):
    cdef int i 
    cdef int n = len(arr)
    cdef array[double] out = new_array_zeros(1.0, n)
    ... # some error checks
    out[0] = arr[0]
    for i in xrange(1,n-1):
        out[i] = out[i-1] + arr[i]

    return(out)
Run Code Online (Sandbox Code Playgroud)

我首先尝试使用Cython numpy包装并使用ndarrays,但是与使用malloc创建C数组相比,创建它们对于小型1D数组来说似乎非常昂贵(但内存处理变得很麻烦).

谢谢!

python arrays performance numpy cython

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

numpy.savetxt一维数组写入的问题

我正在尝试使用numpy的savetxt函数来生成一堆文件作为另一个软件的输入.

我正在尝试编写一个表单数组:

a=np.array([1,2,3,4,...])
a.shape=>(1,n)
Run Code Online (Sandbox Code Playgroud)

到格式为1,2,3,4的文本文件,...

当我输入命令

np.savetxt('test.csv',a,fmt='%d',delimiter=',')
Run Code Online (Sandbox Code Playgroud)

我得到一个看起来像这样的文件:

1

2

3

4

...
Run Code Online (Sandbox Code Playgroud)

savetxt 像我期望的2D阵列那样工作,但我不能将1D阵列的所有值都放在一行上

有什么建议?

谢谢

编辑:

我解决了这个问题.使用np.atleast_2d(a)savetxt作为输入强制savetxt将数组写为行而不是列

python numpy

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

渲染为pdf时,Matplotlib不显示阴影线

我试图在matplotlib中使用阴影线功能,它在显示到屏幕时工作正常.但是,当我将图形保存为pdf格式时,不会渲染阴影线标记:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,100)

plt.figure()
plt.fill(x,np.sin(x),color='blue',alpha=0.5,hatch='/')
plt.show()
plt.savefig('./test.pdf',format='pdf')
Run Code Online (Sandbox Code Playgroud)

我在OS X 10.6.6上的pylab中使用matplotlib 1.0.1.这可能是与后端渲染器有关的平台特定问题,但我不确定.任何建议都将非常感激.

python matplotlib

8
推荐指数
2
解决办法
2970
查看次数

导入错误:没有名为numpy Anaconda的模块

我对这个问题有一个非常相似的问题.我的Windows 7 64位系统上只安装了一个版本的python 3.5.我通过官方网站安装了Anaconda3.4 - 正如问题所示.安装顺利,但是当我想导入时(我只是从命令行输入python)

import numpy

Import error:No module named numpy
Run Code Online (Sandbox Code Playgroud)

然后我退出并输入

pip install numpy 
Run Code Online (Sandbox Code Playgroud)

要求已经满足(使用--upgrade升级):dumpy in d:\ program fi les\anaconda3\lib\site-packages

我知道这可能是一个超级基本的问题,但我还在学习......谢谢

python numpy anaconda conda

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

寻找用于在细分域上进行数值积分的Python包

我想知道是否有人知道基于numpy/scipy的python包在数值上整合了一个复杂的数值函数在一个细分域(在我的特定情况下,一个由voronoi单元限制的2D域)?在过去,我使用了几个matlab文件交换包,但是如果可能的话,我希望保持在我当前的python工作流程中.matlab例程是

http://www.mathworks.com/matlabcentral/fileexchange/9435-n-dimensional-simplex-quadrature

用于正交和网格生成使用:

http://www.mathworks.com/matlabcentral/fileexchange/25555-mesh2d-automatic-mesh-generation

关于网格生成以及随后对网格的数值积分的任何建议都将受到赞赏.

python numpy scipy numerical-integration

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

numpy中的3D切片系列

我有一个3D数组,代表笛卡尔空间的密度值.要获得2D图像,我只需使用其中一个轴进行求和sum(array,2),然后使用matplotlib函数imshow(array2D)获取2D图像.

我想要做的是imshow()一次只显示一个3D阵列切片,这样我就可以"翻页"通过3D阵列来查看图像的不同点.

slice命令很简单:array[:,:,x]但我看不到至少一次显示每个切片的方法.除了每次手动更改程序文件之外,有没有人有其他建议?这可以以某种方式以交互方式完成吗?

python numpy image matplotlib slice

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

在python中将方法动态绑定到类实例

Let's say that I have a class defined in moduleA.py which I want to add a method to, using some sort of loader method that takes a the name of a second module and the method defined there that should be bound

class ClassA(object):
    def __init__(self,config):
        super(ClassA, self).__init__()

        self.a = 1
        self.b = 2
        self.meth1 = self. bind_method(config)

    def bind_method(self,config):
        # load method
        <return method defined in config as a str 'moduleB.meth2'>

    def calling_method():
        return self.meth1() 
Run Code Online (Sandbox Code Playgroud)

where the method defined …

python metaprogramming dynamic

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

多维和线性索引之间的Numpy互换

我正在寻找一种在Numpy中线性和多维索引之间进行互换的快速方法.

为了使我的用法具体化,我有一个大的N个粒子集合,每个粒子分配5个浮点值(维度),给出一个Nx5数组.然后,我使用numpy.digitize并使用适当选择的bin边界来对每个维度进行分区,以便为每个粒子分配5维空间中的bin.

N = 10
ndims = 5
p = numpy.random.normal(size=(N,ndims))
for idim in xrange(ndims):
    bbnds[idim] = numpy.array([-float('inf')]+[-2.,-1.,0.,1.,2.]+[float('inf')])

binassign = ndims*[None]
for idim in xrange(ndims):
    binassign[idim] = numpy.digitize(p[:,idim],bbnds[idim]) - 1
Run Code Online (Sandbox Code Playgroud)

然后binassign包含与多维索引对应的行.如果我想将多维索引转换为线性索引,我想我会想做类似的事情:

linind = numpy.arange(6**5).reshape(6,6,6,6,6)
Run Code Online (Sandbox Code Playgroud)

这将查找每个多维索引以将其映射到线性索引.然后你可以回去使用:

mindx = numpy.unravel_index(x,linind.shape)
Run Code Online (Sandbox Code Playgroud)

我遇到困难的地方是弄清楚如何在每行中包含多维索引的binassign(Nx5数组),并将其转换为1d线性索引,方法是使用它来切割线性索引数组linind.

如果有人有一个(或几个)行索引技巧在多维索引和线性索引之间来回传递,其方式是对所有N个粒子进行矢量化操作,我将非常感谢您的见解.

python indexing numpy

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

从二维数组中提取指定行的最有效方法是什么?

我有一个2-D numpy阵列,有100,000多行.我需要返回这些行的子集(我需要执行该操作数千次,因此效率很重要).

一个模拟示例是这样的:

import numpy as np
a = np.array([[1,5.5],
             [2,4.5],
             [3,9.0],
             [4,8.01]])
b = np.array([2,4])
Run Code Online (Sandbox Code Playgroud)

所以...我希望从第一列中标识的行返回数组b:

c=[[2,4.5],
   [4,8.01]]
Run Code Online (Sandbox Code Playgroud)

当然,区别在于a和b中还有更多的行,所以我想避免循环.另外,我玩制作字典和使用np.nonzero,但仍然有点难过.

提前感谢任何想法!

编辑:请注意,在这种情况下,b是标识符而不是索引.这是一个修改过的例子:

import numpy as np
a = np.array([[102,5.5],
             [204,4.5],
             [343,9.0],
             [40,8.01]])
b = np.array([102,343])
Run Code Online (Sandbox Code Playgroud)

我想回来:

c = [[102,5.5],
     [343,9.0]]
Run Code Online (Sandbox Code Playgroud)

python arrays numpy mask

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