如何将文本文件中的蛋白质能量数据格式化为 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 文件中获取数据:
#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 个。删除该行(或相应地操作它)并且您的代码应该可以正常工作。
我需要测试一些来自 scikit-feature and i want to use some datasets that are in text file, for example: link
的算法我只知道算法用作输入的 matlab 文件格式如下:class 在 'Y' 数组中,数据在 'X' 数组中,这里有一些代码展示了他们如何打开并从 .mat 文件中获取数据:
#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 个。删除该行(或相应地操作它)并且您的代码应该可以正常工作。