用一个数组的每个元素除以另一个数组的每个元素

时间:2019-07-29 17:33:21

标签: python numpy division

我正在编写一个函数,该函数告诉给定数组中哪些数字是质数。 我也想在没有for循环的情况下做到这一点

numpy.divide函数和除符号(/)无效,因为它们引发ValueError,因为两个数组的形状不同

numbers = np.array([2, 3, 6])

def prime(numbers):
    biggest = np.max(numbers)
    division_array = np.arange(2, ceil(biggest / 2) + 1)
    # division_array = [2, 3]
    return numbers / division_array

print(numbers)

预期输出:

[[1, 0.6],
 [1.5, 1],
 [3, 2]]

输出:

  

ValueError:操作数不能与形状(4,)(3,)一起广播

2 个答案:

答案 0 :(得分:2)

由于您需要“全部到所有”操作,所以最好的方法是broadcast阵列。也许最简单的方法是使用numbersnp.newaxis添加尺寸并除法:

import numpy as np

numbers = np.array([2, 3, 6])

def prime(numbers):
    biggest = np.max(numbers)
    division_array = np.arange(2, np.ceil(biggest / 2) + 1)
    # division_array = [2, 3]
    return numbers[:, np.newaxis] / division_array

print(prime(numbers))
# [[1.         0.66666667]
#  [1.5        1.        ]
#  [3.         2.        ]]

答案 1 :(得分:1)

对于不想使用numpy的任何人,我为此创建了一个普通的python函数。

我创建了此函数,您可以使用该函数来获取所需的内容: https://repl.it/repls/ImpartialVainWebsites

array1 = [2, 3, 6]
array2 = [2, 3]

def divide_array(array1, array2):
  new_array = list()
  for element in array1:
    array1_list = list()
    for element2 in array2:
      array1_list.append(round(element/element2, 3))
    new_array.append(array1_list)
  return new_array

print(divide_array(array1, array2))

返回:

[[1.0, 0.667], [1.5, 1.0], [3.0, 2.0]]

或更紧凑的形式:

array1 = [2, 3, 6]
array2 = [2, 3]

def divide_array(array1, array2):
  new_array = list()
  for element in array1:
    new_array.append([round(element/element2, 3) for element2 in array2])
  return new_array

print(divide_array(array1, array2))