Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;如果;Python中用于数组的函数_Python_Numpy_Matplotlib - Fatal编程技术网

&引用;如果;Python中用于数组的函数

&引用;如果;Python中用于数组的函数,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有这个功能: def q(x,y): r2 = (x/2.)**2 + (2.0*y)**2 if (r2 > 0.04): return 0. else: return 1.5 我想用这样的方式来称呼它 from pylab import * dl=0.025 X, Y = mgrid[-0.5:0.5:dl, -0.5:0.5:dl] g(X,Y) 但很明显,这在比较中是一个错误 这可以在不必为X和Y做for循环的情况下完

我有这个功能:

def q(x,y):
    r2 = (x/2.)**2 + (2.0*y)**2
    if (r2 > 0.04): 
        return 0.
    else:
        return 1.5
我想用这样的方式来称呼它

from pylab import *
dl=0.025
X, Y = mgrid[-0.5:0.5:dl, -0.5:0.5:dl]
g(X,Y)
但很明显,这在比较中是一个错误

这可以在不必为X和Y做for循环的情况下完成吗? 因为如果我想调用q(x,y)进行两个双精度运算,那么在这种情况下必须重新实现for循环

编辑:(将此添加到问题中,因为该问题太长,无法发表评论而无法回答,但可能有助于其他人回答。)

看起来
pylab.mgrid
numpy.mgrid
相同

调整为
numpy
,此代码

import numpy
def q(x,y):
    r2 = (x/2.)**2 + (2.0*y)**2
    if (r2 > 0.04): 
        return 0.
    else:
        return 1.5

dl=0.025
X, Y = numpy.mgrid[-0.5:0.5:dl, -0.5:0.5:dl]
q(X,Y)
给出了这个错误

    if (r2 > 0.04):
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()

您可以使用将函数应用于每对元素。

您可以使用将函数应用于每对元素。

表达式
r2>0.04
计算结果为布尔值的NumPy数组,因此您不能在
if
语句中使用它。您可以将其自动重新解释为数字,不过:

def q(x,y):
    r2 = (x/2.)**2 + (2.0*y)**2
    return 1.5 * (r2 <= 0.04)
def q(x,y):
r2=(x/2.)**2+(2.0*y)**2

返回1.5*(r2表达式
r2>0.04
的计算结果为布尔值的NumPy数组,因此您不能在
if
语句中使用它。您可以将其自动重新解释为数字,但:

def q(x,y):
    r2 = (x/2.)**2 + (2.0*y)**2
    return 1.5 * (r2 <= 0.04)
def q(x,y):
r2=(x/2.)**2+(2.0*y)**2

返回1.5*(r2我不知道pylab所以..
r2
中到底是什么,你想用它做什么?如果它是一个数组-你想比较什么?所有元素都必须满足条件或..?r2是省略号的r^2…g(X,Y)应该是类似于mgrid的,但在X,Y的每个点上都有值。请告诉我们
mgrid
是什么对象:
print repr(mgrid)
举个小例子。mgrid是:我不知道pylab,所以..r2中到底是什么?你想用它做什么?如果它是一个数组-你想比较什么?所有元素都必须满足条件或..r2是省略号的r^2…g(X,Y)应该是类似于mgrid的,但在X,Y的每个点上都有值。请告诉我们对象
mgrid
是什么:
print repr(mgrid)
,举个小例子。mgrid是:在给定的上下文中,这个答案是错误的。
X
Y
是二维数组,因此
zip()
将产生成对的行,因此问题仍然没有解决。此外,NumPy的全部目的是避免在所有元素上出现这种Python循环。好的,我删除了不起作用的代码。但我的回答的精神只是建议将“map”作为解决问题的一种可能方法;它并不意味着是最有效的解决方案。Remo我投了我的反对票,因为答案不再是错误的。老实说,我认为这仍然没有特别的帮助。在给定的上下文中,这个答案是错误的。
X
Y
是二维数组,所以
zip()
将产生成对的行,因此问题仍然没有解决。此外,NumPy的全部目的是避免在所有元素上出现这种Python循环。好的,我删除了不起作用的代码。但我的回答的精神只是建议将“map”作为解决问题的一种可能方法;它并不意味着是最有效的解决方案。Remo我投了反对票,因为答案不再是错的。老实说,我认为这仍然没有特别的帮助。这不是最普遍的解决方案,但它解决了这个具体问题。你知道在更多情况下避免这种情况的方法吗(更多的如果是其他的,等等)@J.C.Leitão:如何向量化一段特定代码的细节取决于代码的细节。在这个特定的例子中,它相对简单,在其他情况下更难,有时甚至不可能。给定的技术通常可以扩展到多个
if
语句,可能通过使用
&
>和
|
运算符或部分分配
r2[r2>0.04]=…
。好的。谢谢Sven分享的想法和知识。这不是最普遍的解决方案,但它解决了这个特定问题。你知道在更多情况下避免这种情况的方法吗(更多的如果是其他情况等)@J.C.Leitão:如何向量化一段特定代码的细节取决于代码的细节。在这个特定的例子中,它相对简单,在其他情况下更难,有时甚至不可能。给定的技术通常可以扩展到多个
if
语句,可能通过使用
&
>和
|
运算符或部分分配
r2[r2>0.04]=…
。好的。谢谢Sven分享您的想法和知识。