计算平均值并追加到新数组numpy

时间:2019-01-03 11:08:51

标签: python numpy

我需要计算特定数组的平均值,并创建一个与另一个数组串联的新数组。可以说我的数组如下:

[[99 73 97 98]
 [98 71 70 99]]

还有另一个数组:['1' '2']

所以基本上我需要的是:[[1. 2.] [91.75 84.5]]

换句话说,第一行只是第二个数组,第二行是

的每个元素的平均值
[[99 73 97 98]
 [98 71 70 99]]

分别是数组。

(如果有帮助,我有一个csv文件:)

student_id, 521, 597, 624, 100, 
1, 99, 73, 97, 98, 
2, 98, 71, 70, 99,

student_id行是学生的ID,在每隔一行中,第一个数字是练习编号,其余的是年级。我需要创建一个包含练习数字和每项平均成绩的数组。

我知道可以使用vstack方法来执行此操作,但是我需要使用循环来执行此操作。

2 个答案:

答案 0 :(得分:2)

使用mean,然后使用vstack

import numpy as np

ids = np.array([1, 2])  # this is just array2
arr = np.array([[99, 73, 97, 98],
          [98, 71, 70, 99]])
result = np.vstack((ids, np.mean(arr, axis=1)))
print(result)

输出

[[ 1.    2.  ]
 [91.75 84.5 ]]

答案 1 :(得分:0)

您可以使用Pandas,它简化了从CSV文件中读取结构化数据的操作:

import pandas as pd
from io import StringIO

x = """student_id, 521, 597, 624, 100
1, 99, 73, 97, 98
2, 98, 71, 70, 99
"""

# replace StringIO(x) with 'file.csv'
df = pd.read_csv(StringIO(x))

# calculate mean by row
df['mean'] = df.iloc[:, 1:].mean(1)

# select columns and transpose
res = df[['student_id', 'mean']].values.T

# array([[  1.  ,   2.  ],
#        [ 91.75,  84.5 ]])