小编ema*_*rti的帖子

在matlab中传递和保存匿名函数

我想要一个函数(例如,拟合函数)来返回一个struct我可以保存并稍后使用的匿名函数(通常存储在a中).但是,传递@func往往会传递函数指针而不是函数本身.是一个inline函数来做到这一点的唯一途径?我想避免inline因为它非常慢.

如果这个问题不明确,这里有一个有问题的代码示例:我testFunc.m在一些文件中写了一个文件PATH

    %testFunc.m
    function myfunc = testFunc()
        myfunc = @(x) x.^2;
    end
Run Code Online (Sandbox Code Playgroud)

然后我将函数存储在一个struct.(我知道这应该是一个对象!)

    >> mystruct = struct;
    >> mystruct.func = testFunc()
    >> mstruct.x = [1 2 3];
    >> save('myfile.mat','mystruct')
    >> mystruct.func(mystruct.x)

    ans = 

         1     4     9
Run Code Online (Sandbox Code Playgroud)

如果我然后移动myfile.mattestFunc.m加载 myfile.mat,我无法加载旧的结构.相反,我得到错误:

    >> cd 'otherdir'
    >> load('../myfile.mat')

    Warning: Could not find appropriate function on path
    loading function handle PATH/testFunc.m>@(x)x.^2 
Run Code Online (Sandbox Code Playgroud)

我知道有问题因为,如果我检查一下 functions

    >> functions(mystruct.func)

    ans = 

         function: …
Run Code Online (Sandbox Code Playgroud)

matlab anonymous-function

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

哪个科学数据数据库(可变大小的图像+元数据搜索)

我正在寻找一个很好的数据库解决方案来存储大量的科学数据(大约100 GB到TB)。理想情况下,它将能够处理大量数据。

要求

我的数据文件是“图像”,一个约400万个条目数组(1000x1000x3个整数+ 1000x1000浮点数),以及每个图像约50-100个条目的相关元数据。元数据分层存储。图像将被组织成一个或几个“文件夹”(或“项目”),它们本身可以包含其他文件夹。一切都有所有者,等等。

我将需要主要基于其元数据在一个或几个文件夹中搜索100-10,000张图像。然后,我可能需要从图像中提取切片-如果只需要一部分数据,我真的不想加载所有数据。图像应以压缩格式存储。

编辑:需要强调的是,我缺乏统一的数据。例如,图像是未知尺寸的浮点数或整数,通常具有10 ^ 5-10 ^ 6个条目,每个图像的元数据数量可能会有所不同。当然,跨图像搜索元数据将仅限于具有相同键的图像。

当前方法

我目前(不是很好)的解决方案是混合数据库。首先,我使用一个SQL数据库(现在为Django + MySQL)来处理“文件夹”,所有者,并且每个图像都有一条记录,但没有任何数据。我也可能为元数据创建记录。其次,我正在使用PyTables以hdf5格式存储图像和元数据,并将其像数据库一样对待。这解决了切片和压缩问题,并允许我分层存储元数据,但是PyTables似乎没有可伸缩性,并且开发程度远不及商业数据库。(它不是针对多用户环境而设计的:我正在编写自己的锁!这是一个不好的信号。)

救命!

我不是一名硬核程序员,因此强烈建议使用标准数据库解决方案。我的“优化”肯定会包括维护和编程成本。谁能推荐喜欢的数据库解决方案或体系结构?关于关系vs等级vs其他的想法?

选项可能是SciDB(不常见,可能很好),SQL(听说这些应用程序对PostgreSQL不利)和HBase(实际上,我对此一无所知)。我觉得科学界尤其是天文学界必须有好的解决方案,但是大型项目似乎需要一支认真的团队来建立和维护。

我很乐意提供更多信息。

python database scientific-computing data-management

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

在多维numpy数组中迭代向量

我有一个3xNxM numpy数组a,我想迭代最后两个轴:a [:,x,y].优雅的方法是:

import numpy as np
a = np.arange(60).reshape((3,4,5))
M = np. array([[1,0,0],
               [0,0,0],
               [0,0,-1]])

for x in arange(a.shape[1]):
    for y in arange(a.shape[2]):
        a[:,x,y] = M.dot(a[:,x,y])
Run Code Online (Sandbox Code Playgroud)

这可以用nditer完成吗?这样做的目的是对每个条目执行矩阵乘法,例如[:,x,y] = M [:,:,x,y] .dot(a [:,x,y]).另一种MATLAB风格的方法是将a(3,N*M)和M重塑为(3,3*N*M)并采用点积,但这往往会占用大量内存.

python numpy

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