我正在编写一个函数,该函数告诉给定数组中哪些数字是质数。 我也想在没有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,)一起广播
答案 0 :(得分:2)
由于您需要“全部到所有”操作,所以最好的方法是broadcast阵列。也许最简单的方法是使用numbers
向np.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))