如何将文本文件中的蛋白质能量数据格式化为 scikit 特征算法的 matlab

How to format protein energy data from text file to matlab for scikit-feature algorithms

我需要测试一些来自 scikit-feature and i want to use some datasets that are in text file, for example: link

的算法

我只知道算法用作输入的 matlab 文件格式如下:class 在 'Y' 数组中,数据在 'X' 数组中,这里有一些代码展示了他们如何打开并从 .mat 文件中获取数据:

这是algorithm code

#test_CFS.Py
mat = scipy.io.loadmat('../data/colon.mat')
X = mat['X']    # data
X = X.astype(float)
y = mat['Y']    # label
y = y[:, 0]
n_samples, n_features = X.shape

我尝试编写代码以从 .txt 格式的数据生成 mat 文件,并且它已被我使用的算法成功处理 (test_CFS.py),它没有显示任何错误test file 我只用了 9 列和 8 行。

这是我从 .txt 制作 .mat 文件的代码

#textToMat.py

import numpy as np
import scipy.io as sio

file = open("matrix.txt", "r")
data = file.readlines()

Y = []
subY = []

X = []
subX = []

print len(data)
print len(data[0].split())

for i in range(len(data)):
    values = data[i].split()

    subY.append(np.array(float(values[0]),dtype=float))
    Y.append(np.array(subY))
    subY = []

    for j in range(1, len(values)):
        subX.append(np.array(float(values[j]), dtype=float))

    X.append(subX)
    subX = []

npY = np.array(Y, dtype=float)
npX = np.array(X, dtype=float)

sio.savemat('matrix.mat', {'Y':npY,'X':npX})

但是,当我尝试 运行 使用我生成的大 mat 文件的算法时,它会返回这个错误。

Traceback (most recent call last):
  File "test_CFS.py", line 47, in <module>
    main()
  File "test_CFS.py", line 12, in main
    X = X.astype(float)
ValueError: setting an array element with a sequence.

Yoy 可能会问为什么我将一个包含一个数据的数组附加到另​​一个数组,那是因为当我从 scikit-feature 的 mat 文件中打印数据时,它 returns 我是这样的:

{'Y': array([[-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [ 1],
       [-1],
       [-1],
       [ 1],
       [ 1],
       [-1],
       [-1],
       [-1],
       [-1],
       [ 1],
       [-1],
       [ 1],
       [ 1],
       [-1],
       [-1],
       [ 1],
       [ 1],
       [-1],
       [-1],
       [-1],
       [-1],
       [ 1],
       [-1],
       [ 1]], dtype=int16), 'X': array([[ 2,  0,  0, ...,  0,  2, -2],
       [ 2,  2,  0, ...,  2,  0, -2],
       [-2,  2,  2, ..., -2, -2, -2],
       ..., 
       [ 0, -2, -2, ...,  0,  2, -2],
       [ 0,  0, -2, ...,  0, -2, -2],
       [ 0, -2, -2, ...,  0,  0,  0]], dtype=int16), '__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Mar 25 15:17:35 2015', '__globals__': []}

在我的例子中,我使用的是浮点值。

您的数据有误。对于 numpy 转换,所有行的长度都必须相同。您提供的文件中的所有行都有 643 个条目, 除了第 232 行 ,它有 644 个。删除该行(或相应地操作它)并且您的代码应该可以正常工作。