Python:在列表上应用算术运算符,比如在numpy.ndarray上?

Python:在列表上应用算术运算符,比如在numpy.ndarray上?,python,numpy,iteration,numpy-ndarray,Python,Numpy,Iteration,Numpy Ndarray,这是我的第一个代码,使用numpy.linspace方法: import numpy as np import matplotlib.pyplot as plt def graph(formula, string, x1, x2): x = np.linspace(x1, x2) y = formula(string, x) plt.plot(x, y) def my_formula(string, x): return eval(string) gr

这是我的第一个代码,使用numpy.linspace方法:

import numpy as np
import matplotlib.pyplot as plt


def graph(formula, string, x1, x2):
    x = np.linspace(x1, x2)
    y = formula(string, x)
    plt.plot(x, y)


def my_formula(string, x):
    return eval(string)


graph(my_formula, "2 * (x ** 3) - 9.5 * (x ** 2) + 10.5 * x", 0, 3)
plt.tight_layout()
plt.show()
但是,如果我这样做,它可以很好地工作,而不是导入numpy:

import matplotlib.pyplot as plt


class Module:
    @staticmethod
    def linspace(finish, slices, start=0):
        each = float((finish - start) / (slices - 1))
        res = list()
        for i in range(slices):
            res.append(start + i * each)
        return res


def graph(formula, string, x1, x2):
    x = Module.linspace(x2, 50, start=x1)
    y = formula(string, x)
    plt.plot(x, y)


def my_formula(string, x):
    return eval(string)


graph(my_formula, "2 * (x ** 3) - 9.5 * (x ** 2) + 10.5 * x", 0, 3)
plt.tight_layout()
plt.show()
下面显示一个错误:

Traceback (most recent call last):
File "C:/Users/QINY/PycharmProjects/begin/covid/seven.py", line 24, in <module> graph(my_formula, "2 * (x ** 3) - 9.5 * (x ** 2) + 10.5 * x", 0, 3)
File "C:/Users/QINY/PycharmProjects/begin/covid/seven.py", line 16, in graph y = formula(string, x) File "C:/Users/QINY/PycharmProjects/begin/covid/seven.py", line 21, in my_formula return eval(string)
File "<string>", line 1, in <module> TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
回溯(最近一次呼叫最后一次):
文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第24行,在图中(我的_公式,“2*(x**3)-9.5*(x**2)+10.5*x”,0,3)
文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第16行,在图y=公式(字符串,x)中,文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第21行,在my_公式返回值(字符串)中
文件“”,第1行,类型错误:不支持**或pow()的操作数类型:'list'和'int'
有人能解释一下如何在numpy.adarray中自动迭代列表吗

他们使用

它们的类型支持类似于
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuu。。。在
ndarray
的每个元素上应用操作的实现(非常有效…)

您可以创建自己的类型,该类型继承自
列表
,并让它实现这些成员函数,自己迭代列表,将其应用于每个元素。

它们使用

它们的类型支持类似于
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuu。。。在
ndarray
的每个元素上应用操作的实现(非常有效…)


您可以创建自己的类型,继承自
list
,并让它实现这些成员函数,自己迭代列表,将其应用于每个元素。

错误是什么?回溯(最近一次调用):文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第24行,在图(my_公式,“2*(x**3)-9.5*中(x**2)+10.5*x”,0,3)文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第16行,在图形y=公式(字符串,x)文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”中,在my_公式返回eval(字符串)文件“”中,第1行,类型错误:不支持**或pow()的操作数类型:“list”和“int”好的,你到底在问什么?你说的“list迭代是如何实现的”是什么意思?这个例子要问我想你在问的问题完全过于复杂了。如果你不关心元素的迭代顺序,你可以使用nditer来迭代数组对象::错误是什么?回溯(最近一次调用):文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第24行,在图(my_公式)中,“2*(x**3)-9.5*(x**2)+10.5*x”,0,3)文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”,第16行,在图y=公式(string,x)文件“C:/Users/QINY/PycharmProjects/begin/covid/seven.py”中,第21行,在my_公式返回eval(string)文件中,第1行,在TypeError中:不支持**或pow()的操作数类型:'list'和'int'好的,你到底在问什么?你说的“list迭代是如何实现的”是什么意思?这个例子要问我想你在问的问题,完全过于复杂了。如果你不关心元素的迭代顺序,你可以使用nditer来迭代数组对象::
class Iteration:def uuu init_u(self,array):self.array=array def u pow_u(self,power,modulo=None):new_array=list()表示self.array中的i:new_array.append(i**power)return new_array def_ulen_uuuuu(self):return len(self.array)def_uugetitem_uuuu(self,index):return self.array[索引]
it=Iteration([1,2,3])def sub(list1,list2):new_list=list()对于枚举(list1)中的i,d:new_list.append(d-list2[i])返回new_list print(sub([6,7,8],it))#=>[5,5,5]
类迭代:def_uinit_uu(self,array):self.array=array def_upow_u(self,power,modulo=None):new_array=list()对于self.array中的i:new_array.append(i**power)return new_array def_ulen_uu(self):return len(self.array)def_ugetitem_u(self,index):return self.array[index]
it=Iteration([1,2,3])def sub(列表1,列表2):new_list=list()用于枚举中的i,d(列表1):new_list.append(d-list2[i])返回新的_list打印(sub([6,7,8],it))#=>[5,5,5]