首页 > 解决方案 > 如何在numpy中返回一个数组列?

问题描述

所以我想编写一个函数,对数组中的每个元素执行 z-score 转换,并且该函数应该返回一个结果数组。当我使用循环对数组中的每个元素执行转换时,这for不是问题。

   x1 = np.array([[4,3,12],[1,5,20],[1,2,3],[10,20,40],[7,2,44]])
   mean = np.average(x1)
   std = np.std(x1)

   for i in x1:
       arr1 = ((i-mean)/std)
       print(arr1)

   type(arr1)

for但是,当我对数组的第 1 列使用循环时,我得到了float值。

for x in x1[:,1]:
    arr2 = ((i-mean)/std)
    print(arr2)
    
type(arr2)

我能做些什么来确保arr2返回的是一个一维数组。在此处输入图像描述

标签: pythonarraysnumpynumpy-ndarray

解决方案


您不需要循环来计算:

(x-x.mean())/x.std()

例子:

x = np.arange(3*4).reshape(3,4)
#[[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]

(x-x.mean())/x.std()
#[[-1.59325501 -1.30357228 -1.01388955 -0.72420682]
# [-0.43452409 -0.14484136  0.14484136  0.43452409]
# [ 0.72420682  1.01388955  1.30357228  1.59325501]]

然后您可以选择您想要的任何列/行:

选择第一列:

((x-x.mean())/x.std())[:,0]
#[-1.59325501 -0.43452409  0.72420682]

推荐阅读