如何仅获取数组中的奇数并使用 numpy 对它们求平方 python?
How to get only odd numbers in array and square them using numpy for python?
我在 Python:
中没有使用 NumPy 就完成了这个
def fun_list(list_, x):
#set list to odd numbers in list_ raised to number x
s=[]
s= [i**x for i in list_ if (i%2)!=0]
list_=s
print(list_)
正在测试函数:
list1 = [1, 2, 3, 4]
list2 = [2, 3, 4, 5]
print(fun_list(list1, 2))
print(fun_list(list2, 3))
结果:
[1, 9]
None
[27, 125]
None
现在需要使用 NumPy 来完成它,我不理解它,也无法在网上找到太多关于它的信息,而且我发现的东西对我来说没有意义。这是我试过的:
import math
#set list to odd numbers in list_ raised to number x
a=np.array([array_])
pwr=x
a=np.array([a if np.mod(a)!=0])
a=np.array([np.power(a,pwr)])
print (a)
正在测试函数:
import numpy as np
array1 = np.array([1, 2, 3, 4])
array2 = np.array([2, 3, 4, 5])
print(fun_array(array1, 2))
print(fun_array(array2, 3))
结果:
File "<ipython-input-161-fc4f5193f204>", line 21
a=np.array([a if np.mod(a)!=0])
^
SyntaxError: invalid syntax
我不明白如何使用 NumPy 只获取数组中的奇数。
给你:
a=np.array([1,2,3,4,5,6])
power = 2
answer = (a[a%2==1])**power
print (answer)
输出
[ 1 9 25]
在这里,操作 a%2==1
return 是一个布尔数组 array([ True, False, True, False, True, False], dtype=bool)
如果 remainder/modulus 除以 2
(由 a%2
) 给出的值是 1
和 False
如果它的 0
。将其用作数组 a
的参数将 return 只有参数为 'True' 的 a
值。这只会从 a
中产生奇数。 **
然后对这些奇数进行平方。如果您想要偶数,一种方法是将 a%2==0
放入您的条件中。
numpy 的强大之处在于它允许您在一次操作中对整个数组进行操作。这称为矢量化或向量化。当然,在引擎盖下有循环来执行此操作,但它们是用 C 语言编写的并经过高度优化,因此它们 运行 数量级比您使用纯 python.[=24 可以实现的任何速度都快=]
因此,当您使用 numpy 编写函数时,您的首要目标是让 numpy 完成所有工作。理想情况下,不应该有显式循环,只有同时对整个数组进行操作的调用。幸运的是,numpy 提供了所有必要的实用程序,使您的情况成为可能。
下面是分步指南:
首先,将您的输入转换为数组。数组在很多方面就像列表,不同之处在于您可以对它们执行向量化操作。如果你传入一个列表,大多数 numpy 函数会默默地将它们的输入转换为一个数组,但我们会明确地这样做:
def numpy_fun_list(list_, x):
arr = np.array(list_)
到目前为止一切顺利。所有进一步的操作都将对 arr
而不是 list_
.
进行
接下来您需要过滤掉偶数元素。最简单的方法是屏蔽数组。当您使用相同大小的布尔数组索引 numpy 数组时,它将 select 布尔数组中为 True 的元素并丢弃其余元素。例如:
>>> data = np.array([1, 2, 3, 4])
>>> mask = np.narray([True, False, False, True])
>>> data[mask]
array([1, 4])
所有的条件运算符和比较运算符都创建了这样的布尔数组。在你的例子中,你想检查一个数字是否是奇数,所以你像 Python 一样使用模数,除了模数对数组的每个元素进行操作:
mask = (arr % 2) == 1
运算符 ==
将模运算的结果转换为布尔掩码:
arr = arr[mask]
现在我们需要对剩余 arr
的每个元素进行 x
次方。如您所料,这就是 np.power
的作用:
arr = np.power(arr, x)
就是这样。现在您可以 return 或打印您的结果。实际上,对此有一点注意:
您的原始函数将结果打印到屏幕上,但 return 没有。函数的 return 值隐式为 None
,这就是为什么您会看到所有这些 Nones 被打印出来的原因。如果您不 return 它,那么您对计算列表无能为力,从而使整个函数变得毫无用处。我的建议是将 print (list_)
替换为 return list_
。
将 numpy 导入为 np
def my_fun(a):
arr_1=np.array(一)
打印(arr_1)
## even and odd elements fetching in two diff matrix
[l,b]=np.shape(arr_1)
print(l,b)
for key1 in range(0,l):
for key2 in range(0,b):
if arr_1[key1,key2]%2==0:
idx_div_zero=([key1,key2])
prop_format=tuple(idx_div_zero)
arr_1[prop_format]=0
if arr_1[key1,key2]%2!=0:
ff=([key1,key2])
prop_fmt_nz=tuple(ff)
arr_1[prop_fmt_nz]=1
print(arr_1)
我在 Python:
中没有使用 NumPy 就完成了这个def fun_list(list_, x):
#set list to odd numbers in list_ raised to number x
s=[]
s= [i**x for i in list_ if (i%2)!=0]
list_=s
print(list_)
正在测试函数:
list1 = [1, 2, 3, 4]
list2 = [2, 3, 4, 5]
print(fun_list(list1, 2))
print(fun_list(list2, 3))
结果:
[1, 9]
None
[27, 125]
None
现在需要使用 NumPy 来完成它,我不理解它,也无法在网上找到太多关于它的信息,而且我发现的东西对我来说没有意义。这是我试过的:
import math
#set list to odd numbers in list_ raised to number x
a=np.array([array_])
pwr=x
a=np.array([a if np.mod(a)!=0])
a=np.array([np.power(a,pwr)])
print (a)
正在测试函数:
import numpy as np
array1 = np.array([1, 2, 3, 4])
array2 = np.array([2, 3, 4, 5])
print(fun_array(array1, 2))
print(fun_array(array2, 3))
结果:
File "<ipython-input-161-fc4f5193f204>", line 21
a=np.array([a if np.mod(a)!=0])
^
SyntaxError: invalid syntax
我不明白如何使用 NumPy 只获取数组中的奇数。
给你:
a=np.array([1,2,3,4,5,6])
power = 2
answer = (a[a%2==1])**power
print (answer)
输出
[ 1 9 25]
在这里,操作 a%2==1
return 是一个布尔数组 array([ True, False, True, False, True, False], dtype=bool)
如果 remainder/modulus 除以 2
(由 a%2
) 给出的值是 1
和 False
如果它的 0
。将其用作数组 a
的参数将 return 只有参数为 'True' 的 a
值。这只会从 a
中产生奇数。 **
然后对这些奇数进行平方。如果您想要偶数,一种方法是将 a%2==0
放入您的条件中。
numpy 的强大之处在于它允许您在一次操作中对整个数组进行操作。这称为矢量化或向量化。当然,在引擎盖下有循环来执行此操作,但它们是用 C 语言编写的并经过高度优化,因此它们 运行 数量级比您使用纯 python.[=24 可以实现的任何速度都快=]
因此,当您使用 numpy 编写函数时,您的首要目标是让 numpy 完成所有工作。理想情况下,不应该有显式循环,只有同时对整个数组进行操作的调用。幸运的是,numpy 提供了所有必要的实用程序,使您的情况成为可能。
下面是分步指南:
首先,将您的输入转换为数组。数组在很多方面就像列表,不同之处在于您可以对它们执行向量化操作。如果你传入一个列表,大多数 numpy 函数会默默地将它们的输入转换为一个数组,但我们会明确地这样做:
def numpy_fun_list(list_, x):
arr = np.array(list_)
到目前为止一切顺利。所有进一步的操作都将对 arr
而不是 list_
.
接下来您需要过滤掉偶数元素。最简单的方法是屏蔽数组。当您使用相同大小的布尔数组索引 numpy 数组时,它将 select 布尔数组中为 True 的元素并丢弃其余元素。例如:
>>> data = np.array([1, 2, 3, 4])
>>> mask = np.narray([True, False, False, True])
>>> data[mask]
array([1, 4])
所有的条件运算符和比较运算符都创建了这样的布尔数组。在你的例子中,你想检查一个数字是否是奇数,所以你像 Python 一样使用模数,除了模数对数组的每个元素进行操作:
mask = (arr % 2) == 1
运算符 ==
将模运算的结果转换为布尔掩码:
arr = arr[mask]
现在我们需要对剩余 arr
的每个元素进行 x
次方。如您所料,这就是 np.power
的作用:
arr = np.power(arr, x)
就是这样。现在您可以 return 或打印您的结果。实际上,对此有一点注意:
您的原始函数将结果打印到屏幕上,但 return 没有。函数的 return 值隐式为 None
,这就是为什么您会看到所有这些 Nones 被打印出来的原因。如果您不 return 它,那么您对计算列表无能为力,从而使整个函数变得毫无用处。我的建议是将 print (list_)
替换为 return list_
。
将 numpy 导入为 np def my_fun(a): arr_1=np.array(一) 打印(arr_1)
## even and odd elements fetching in two diff matrix
[l,b]=np.shape(arr_1)
print(l,b)
for key1 in range(0,l):
for key2 in range(0,b):
if arr_1[key1,key2]%2==0:
idx_div_zero=([key1,key2])
prop_format=tuple(idx_div_zero)
arr_1[prop_format]=0
if arr_1[key1,key2]%2!=0:
ff=([key1,key2])
prop_fmt_nz=tuple(ff)
arr_1[prop_fmt_nz]=1
print(arr_1)