【问题标题】:2d array compare to 1d array returns 2d array2d 数组与 1d 数组比较返回 2d 数组
【发布时间】:2018-08-06 11:24:06
【问题描述】:

我正在尝试将 1D 数组元素与 2D 数组进行比较,并在不使用 for 循环的情况下以 2D 数组形式返回满足条件的 2D 数组元素。最好使用 numpy 或更快的方法。

a = range(1,10)
Tna = np.random.choice(a, size=[250,10,1000], replace=True)
sum_Ta = np.sum(Tna, axis = 1)
percent = np.percentile(sum_Ta, 5, axis =0)

现在我想得到一个包含 sum_Ta 元素的二维数组,如果元素小于百分比。这样 sum_Ta 的 250 个元素与 percent 的 1 个元素比较 1000 次。最初我可以做到,ES = sum_Ta[sum_Ta < percent[:,None]],但它只给了我一个一维数组,而不是一个二维数组。

【问题讨论】:

  • range(1, 0) 返回一个空集,range(0,1) 将始终返回 0;你的意思是range(0, 2)?另外,您是否正在寻找作为二维数组掩码的结果?还是匹配元素的列表?

标签: python arrays numpy machine-learning elementwise-operations


【解决方案1】:

假设您的意思是对于每一行,如果该行的元素小于与其列关联的百分比,您希望包含该行的元素。

尝试以下方法:

mask = sum_Ta < (percent * np.ones((250,1)))
ES = np.zeros((250, 1000))
ES[mask] = sum_Ta[mask]

【讨论】:

  • 对不起,我弄错了。应该是 a = range(0,10)。掩码返回,“操作数不能与形状 (1000,) (250,10) 一起广播”?
  • 第一行有错字,应该是np.ones((250, 1))。看看这是否给你你正在寻找的行为。
  • percent * np.ones((250, 1)) 行基本上将一维数组拉伸成列,以便可以将其与二维数组逐元素进行比较
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多