【问题标题】:Taking a mean of the elements of arrays with different sizes取不同大小数组元素的平均值
【发布时间】:2018-09-01 09:25:03
【问题描述】:

假设我有一个 5x5 数组“A”。我想取该数组中五个元素的平均值。这些值之一可能是 Nan。我认为这样的事情会起作用:

np.nanmean(np.array([A[1,1], A[2, 2:3], A[3, 1:3]]))

但事实并非如此。我明白了

ValueError: setting an array element with a sequence.

我也尝试过连接、展平和使用列表而不是 np.array,但没有运气。

如果这个问题是重复的,我很抱歉。这似乎是一个简单的问题,但我无法弄清楚,而且我发现很难选择好的搜索词来在线找到解决方案。

【问题讨论】:

  • 它是如何不起作用的,究竟是什么问题?你有什么错误吗?
  • 我收到“ValueError: setting an array element with a sequence”。我也会在我的问题中添加它。
  • 我不确定你为什么会收到那个 Value 错误机器人,它与你描述的问题无关。您正在从大小不一的切片创建一个数组,我相信这将导致以下值错误ValueError: operands could not be broadcast together with shapes,至少在我的1.14.1 numpy 版本中。
  • 我现在尝试了下面的事情并得到了同样的错误: import numpy as np A = np.ones((5,5)) np.nanmean(np.array([A[1,1 ], A[2, 2:3], A[3, 1:3]])) 回溯(最近一次调用最后):文件“C:\Users\jorre\Anaconda3\lib\site-packages\IPython\core \interactiveshell.py”,第 2862 行,run_code exec(code_obj, self.user_global_ns, self.user_ns) 文件“”,第 1 行,在 np.nanmean(np.array ([A[1,1], A[2, 2:3], A[3, 1:3]])) ValueError: setting an array element with a sequence.

标签: python arrays numpy nan mean


【解决方案1】:

你可以在取平均值之前将所有元素连接成一个数组:

np.nanmean(np.concatenate([[A[1,1]], A[2, 2:3], A[3, 1:3]]))

请注意,我已将A[1,1] 放在一个额外的列表中。这是微妙的,也是你麻烦的根源:虽然例如A[2, 2:3] 只包含一个数字,它仍然是一个数组,因为它是由切片构造的。另一方面,A[1,1] 只是一个数字,而不是存在于数组对象中。您的错误消息告诉您,将这个裸数与其他数组混合会导致麻烦。

【讨论】:

  • 我认为你没有理解我的问题。我想计算我的 A 矩阵中只有五个元素的平均值。这五个元素中的一个(或多个)可能是Nan。您的解决方案计算 A 中所有非 Nan 元素的平均值。我认为使用 np.nanmean(A) 可以更轻松地做到这一点。
  • @JorreGoossens 我已经完全改变了答案。请重读。
  • 是的,当然......这可能很微妙,但我应该考虑到这一点。这解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多