如何从原始数组创建numpy子数组列表,然后在所述列表上应用函数?

时间:2017-06-05 19:11:22

标签: python arrays list numpy matrix

早上好。现在我正在使用数字数据的csv并将其转换为numpy矩阵。 CSV相当大(10000x5),构造如下(我想,列矢量的首字母缩略词并不重要,但我会包括它们):主题名称,血压,PDAC,GSIC,TDAP

我想做的是创建一个numpy矩阵列表,使每个矩阵包含与唯一主题名称相关联的值,作为一个简单的示例编辑(建议我将“主题名称列”更改为“ subject id“通过创建从名称到id的映射。在此示例中,carl具有id 1,而doug具有id 2):

Original=np.matrix['1 17 28 32 79; 1 89 72 46 22; 1 91 93 88 90; 2 21 57 73 68; 2 43 32 21 22']

Carl = np.matrix['1 17 28 32 79; 1 89 72 46 22; 1 91 93 88 90']
Doug = ['2 21 57 73 68 ;2 43 32 21 22']

matrixlist = [ Doug, Carl]

对于一些矩阵来说,这对问题来说并不太难 - 但是在父csv中有很多主题分散,并且并非每个主题都有相同数量的条目。我已经尝试将所有数据转换为列表然后使用列表理解但我遇到了一些问题。

最后,我想知道是否有办法将函数应用于矩阵列表中的每个元素。另一个简单的例子:我写了一个函数,用它的svd计算numpy数组的相关矩阵。是否可以将其应用于列表中的每个元素?

def correlation_matrix(x):
    covariance_matrix = np.cov(x, y=None, rowvar=False, bias=False, ddof=None, fweights=None, aweights=None)
    correlation_matrix =np.matmul(np.matmul(fractional_matrix_power(np.diag(np.diag(covariance_matrix)),-1/2),covariance_matrix),(fractional_matrix_power(np.diag(np.diag(covariance_matrix)),-1/2)))
    return correlation_matrix

提前感谢!

1 个答案:

答案 0 :(得分:1)

晚上好。一个非常好的方法是使用pandas DataFrame。要读取数据并对主题进行排序,请执行以下操作:

import pandas as pd
my_df = pd.read_csv(your_filename, names=['subject','0','1','2','3'])
grouped_output = my_df.groupby('subject').get_group('Carl')

这将只返回DataFrame中的Carl Data。在此之后,您可以遍历所有小组科目,并做任何你想做的事情。循环可能如下所示:

for key, subject in my_df.groupby('subject').groups.items():
    print(my_df.groupby('subject').get_group(subject))