小编sur*_*chs的帖子

如何在同一个存档中保存字典和数组(使用numpy.savez)

这是第一个问题.我会尽量简明扼要.

我正在生成包含机器学习应用程序的功能信息的多个数组.由于数组没有相同的尺寸,我将它们存储在字典而不是数组中.有两种不同的功能,所以我使用两种不同的词典.

我还生成标签以配合这些功能.这些标签存储在数组中.此外,还有一些字符串包含用于运行脚本的确切参数和时间戳.

总而言之它看起来像这样:

import numpy as np    

feature1 = {}
feature2 = {}
label1 = np.array([])
label2 = np.array([])
docString = 'Commands passed to the script were...'

# features look like this:
feature1 = {'case 1': np.array([1, 2, 3, ...]),
            'case 2': np.array([2, 1, 3, ...]),
            'case 3': np.array([2, 3, 1, ...]),
            and so on... }
Run Code Online (Sandbox Code Playgroud)

现在我的目标是这样做:

np.savez(outputFile, 
         saveFeature1 = feature1, 
         saveFeature2 = feature2, 
         saveLabel1 = label1, 
         saveLabel2 = label2,
         saveString = docString)
Run Code Online (Sandbox Code Playgroud)

这似乎有效(即保存这样的文件没有抛出错误,可以再次加载).但是,当我尝试再次加载文件中的功能时:

loadedArchive = np.load(outFile)
loadedFeature1 = …
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy

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

在脚本中运行scipy的oneway anova

我有个问题.我想在脚本中运行scipy.stats f_oneway()ANOVA,该脚本加载包含numpy数组的数据存档,如下所示:

archive{'group1': array([ 1, 2, 3, ..., ]),
        'group2': array([ 9, 8, 7, ..., ]),
        ...}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是不同数据档案的组数不固定.换句话说,我事先并不知道档案中有多少组(也不一定是他们的名字).

单向ANOVAscipy实现只接受逗号分隔的数组作为输入,如下所示:

a = array([ 1, 2, 3, ..., ])
b = array([ 9, 8, 7, ..., ])
c = array([ 5, 6, 4, ..., ])

scipy.stats.f_oneway(a, b, c)
Run Code Online (Sandbox Code Playgroud)

我试图给它列表,元组,多维数组都没有成功.所以目前,我可以使用这种ANOVA实现的唯一方法是每次手动输入组变量,这实际上使得无法在脚本中运行它.我想知道你们其中一个人是否知道如何解决这个问题或如何避免f_oneway()的这些非常具体的数据格式要求.

python scipy anova

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

什么可能导致IOError:错误的消息长度

我正在使用python脚本来操纵和从4D图像中提取信息(功能性MRI扫描).部分分析设置为使用多处理包并行运行(针对每个主题):

pool = Pool(processes=numberCores)
resultList = pool.map(SubjectProcesser, argList) # where arglist is the list of arguments passed to the process
Run Code Online (Sandbox Code Playgroud)

这些适用于不同类型的文件和不同类型的分析.对于一种特定类型的分析,我收到以下错误:

Process PoolWorker-1:
Traceback (most recent call last):
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
  self.run()
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 114, in run
  self._target(*self._args, **self._kwargs)
File "/home2/surchs/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 99, in worker
  put((job, i, result))
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/queues.py", line 392, in put
  return send(obj)
IOError: bad message length
Run Code Online (Sandbox Code Playgroud)

我把它缩小到了失败的程度.并行进程显然执行OK(通过在我的脚本的不同阶段查看我的各种调试打印输出来确定),但随后在重新映射结果期间发生了故障.

我已搜索此错误消息但尚未找到任何解决方案.由于我的脚本适用于所有其他类型的分析,我想知道可能会发生什么.

有点关于分析,因为我猜这会引起问题

不同的分析是或多或少的时间序列提取大脑中的体素(将大脑想象为3D矩阵,时间作为第四维度,矩阵元素称为体素).大脑中的任何一点都有每个时间点的激活值.然后,时间序列是给定体素随时间的所有激活值的向量.

然后我计算所有体素之间的相关系数(通过体素给出方形相关矩阵与维度体素)并返回所有相关系数的矢量(矩阵的下三角形)作为并行处理的输出.

现在对于没有抛出错误的所有分析,我平均多个体素(基于区域节点),然后使用该区域的平均时间序列 - 有效地做两件事:

  1. 大幅减少体素数量(减少到区域数量)
  2. 摆脱总是为零的体素(由于平均值.没有区域只包含零体素)

相反,给出上述误差的分析使用大脑中的所有体素时间序列,从而产生更大的相关矩阵.

我试图通过屏蔽每个主题文件来摆脱零体素,而且,我没有得到任何"除零"错误,但这些是我能想到的唯一两件事.

而且,如上所述,处理的并行部分没有问题地贯穿.在运行之后抛出错误,可能是在重新映射结果期间.

任何帮助将不胜感激.另外,如果我需要提供更多详细信息,请告知我们.

python multiprocessing

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

支持向量 - /Logistic - 回归:你有波士顿住房数据的基准测试结果吗?

我将通过在sklearn(sklearn.datasets.load_boston)附带的波士顿房价数据集上运行它来测试我的sklearn支持向量回归包的实现.

在玩了一段时间后(尝试不同的正则化和管参数,案例的随机化和交叉验证)并且始终如一地预测扁平线我现在对于失败的地方感到茫然.更引人注目的是,当我使用也附带sklearn.datasets包(load_diabetes)的糖尿病数据集时,我得到了更好的预测.

这是复制的代码:

import numpy as np
from sklearn.svm import SVR
from matplotlib import pyplot as plt
from sklearn.datasets import  load_boston
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression

# data = load_diabetes()
data = load_boston()
X = data.data
y = data.target

# prepare the training and testing data for the model
nCases = len(y)
nTrain = np.floor(nCases / 2)
trainX = X[:nTrain]
trainY = y[:nTrain]
testX  = X[nTrain:]
testY = y[nTrain:]

svr = SVR(kernel='rbf', C=1000)
log = LinearRegression()

# …
Run Code Online (Sandbox Code Playgroud)

python regression machine-learning scikit-learn

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