【问题标题】:How to return an array column in numpy?如何在numpy中返回一个数组列?
【发布时间】:2020-09-01 00:08:57
【问题描述】:

所以我想编写一个函数,对数组中的每个元素执行 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)

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

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

如何确保返回的arr2 是一维数组。

【问题讨论】:

  • 请避免在 SO 上发布图片,而是在此处发布代码/数据本身。谢谢。
  • 您的意思是分别计算列/行的平均值和平均值吗?我不清楚这个问题。也许你可以详细说明一下。谢谢
  • 感谢 Ehsan 的回复,我也发布了代码。不,我只想检索“转换后的”列/行,而不是分别计算列和行的平均值。
  • 发布的答案是否解决了问题?如果没有,您能否向我们提供您想要的输出?

标签: python arrays numpy numpy-ndarray


【解决方案1】:

您不需要循环来计算:

(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]

【讨论】:

  • 感谢 Ehsan,我认为您的代码可以得到我想要的输出。
  • @LordVoldemort 欢迎您。请查看stackoverflow.com/help/someone-answers 了解如何接受答案,欢迎来到 SO。
【解决方案2】:

如果您想拥有与您展示的相同的结构,这可以帮助您

a = np.array([])
for i in x1[:,1]:
    val = ((i-mean)/std)
    a = np.append(a,val)
type(a)

【讨论】:

  • 我们正在与numpy 合作,因此此处应尽可能避免循环。另一个答案说明了一种方法。
  • 这就是我说“相同结构”的原因。你是对的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2011-03-10
  • 1970-01-01
  • 2018-04-22
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多