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

Divide each element of an array by each element of an other array

我正在编写一个函数,用于判断给定数组中哪些数字是质数。 如果可能的话,我也想在没有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: operands could not be broadcast together with shapes (4,) (3,)

对于不想使用 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))

Returns:

[[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))

既然你想要一个"all-to-all"操作,最好的办法是broadcast数组。也许最简单的方法是用 np.newaxisnumbers 添加一个维度并除以:

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