【问题标题】:How can I subtract all elements of an array from all elements in another in Python?如何在 Python 中从另一个数组的所有元素中减去一个数组的所有元素?
【发布时间】:2014-07-10 11:45:11
【问题描述】:

我需要从数组 x2 中的所有数字中减去数组 x1 中的一个数字,并检查结果的绝对值是否小于 0.01,如果是则将 x1 附加到新数组中。然后我需要对数组 x1 中的所有元素重复此操作。

这样做需要 250 亿次计算,因为两个数组都很长(50000 和 500000 个元素),所以我希望尽量减少所需的处理量。

谢谢!

b = np.zeros(len(a), 1)               #a is a list of numbers 48555 elements long
b[:,0] = a[:,0]

e = np.zeros(len(d), 1)               #d is a list of numbers 531261 elements long
e[:,0] = d[:,0]

h = np.zeros(len(len(a)*len(d),1)     #h needs to be an array of length a*d
for i in e, j in b,
if abs(i-j)<=0.01,
h.append(i)

print h

我之前没有太多使用代码,所以我仍然在使用 Python 时犯了相当基本的错误。

【问题讨论】:

  • 所以不是 a1 - b1, a2 - b2 而是 a1 - b1, a1 - b2, a2 - b1, a2 - b2?计算的数量表明第二个,但也许你的意思是第一个?
  • 这听起来绝对像是你可以用一些代码来做的事情。祝你好运!你有什么问题?
  • 是你的任务吗?给我们你试过的
  • 你需要做这些操作还是只是对“新数组”感兴趣?
  • @RedX 这是第二个。它是检查两组坐标是否相同,每组坐标来自不同的仪器,如果坐标之间的差异小于仪器的误差,那么它们可能是相同的。

标签: python for-loop numpy


【解决方案1】:
x1 = np.array([5, 8, 3, 4, 5, 6])
x2 = np.array([ 0, 6, 3, 4, 2, 7])

print all(abs(np.subtract(x2 ,x1[1]) < .01))
True

print all(abs(np.subtract(x2 ,x1[0]) < .01))
False

您可以遍历 x1 并在任何值 > .01 时立即继续,以避免检查所有值:

for ele in x1:
    if any(abs(x - ele) > .01 for x in x2 ):
        continue
    else: add your array

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多