Python:数组与非数组的元素比较

时间:2017-03-01 00:21:47

标签: python arrays numpy elementwise-operations

我正在尝试使用numpy绘制一些复杂的函数。一些工作代码示例:

/home/ubuntu/delete_slack/delete_slack.sh: 3: /home/ubuntu/delete_slack/delete_slack.sh: slack-cleaner: not found

但是,假设我希望函数f在其中进行简单比较,如下所示:

import numpy as np
from PIL import Image

size = 1000

w = np.linspace(-10, 10, size)
x, y = np.meshgrid(w, w)
r = x + 1j*y

def f(q):
    return np.angle(q)

z = f(r)

normalized = ((255/(np.amax(z) - np.amin(z)))*(z+abs(np.amin(z)))).astype(int)

data = [i for j in normalized for i in j]

img = Image.new('L', (size, size))
img.putdata(data[::-1]) #pixels are done bottom to top
img.show()

我收到错误

def f(q):
    if np.abs(q) < 4:
        return 1
    else:
        return 0

对于np.abs(q)&lt; 4检查。

我做了一些挖掘并意识到这是因为Python正在对整个r数组进行操作,并且无法将数组与整数进行比较。所以,我试图寻找进行元素比较的方法。

This page看起来很有希望:它说我可以通过使用np.less(a,b)进行元素比较,所以我试过

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

并得到了相同的ValueError。似乎np.less()的两个参数都需要是相同大小的数组。

我想要的是将我的数组的每个元素与单个非数组数量进行比较。我想我可以制作一个相同大小的虚拟数组,其中填充相同的4个,但是做一个更优雅的方式。

1 个答案:

答案 0 :(得分:0)

关键是返回一个数组值,而不是试图将数组强制转换为单个bool,这是if (some_array):一直试图做的事情。没有明确的方法来决定单个布尔值np.array([True, False])应转换为什么,它甚至不会尝试。

所以不要分支:

def f(q):
    return abs(q) < 4

给出一个类似

的数组
>>> f(np.array([1,3,5]))
array([ True,  True, False], dtype=bool)

其中数字的行为类似于

>>> f(np.array([1,3,5])).astype(int)
array([1, 1, 0])

并给予

circle