分割数组的最佳方法是什么,以便我只能迭代负值,然后是正值,然后是零?例如:
x= [[-20., -15., -10., -5., 0., 5., 10., 15., 20.]]
y= [[-20., -15., -10., -5., 0., 5., 10., 15., 20.]]
Q1=8
Q2 =12
if y>0.0 and x -y>=-Q1:
return 'sum function'
elif y<0.0 and x -y>=-Q2:
return 'sum function'
elif y==0.0 and x >=-Q1:
return 'sum function'
return 0.0
我得到错误类型:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
答案 0 :(得分:2)
您可以使用逻辑索引将数组拆分为正数,负数和零值:
import numpy
x = numpy.array([-20., -15., -10., -5., 0., 5., 10., 15., 20.])
y = numpy.array([-20., -15., -10., -5., 0., 5., 10., 15., 20.])
Q1 = 8
Q2 = 12
positives = x[x > 0]
negatives = x[x < 0]
zeroes = x[x == 0]
您可以使用numpy.logical_and
一次在两个数组上执行比较表达式,始终比较同一位置的两个值:
print y[numpy.logical_and(y > 0.0, x - y >= -Q1)]
print y[numpy.logical_and(y < 0.0, x - y >= -Q2)]
print y[numpy.logical_and(y == 0.0, x >= -Q1)]
答案 1 :(得分:1)
你可以使用numpy和array作为过滤器:
from numpy import array
x = array([-10, 5, -5, 10, 0, 0])
for u in x[x < 0]:
print(u)
for u in x[x > 0]:
print(u)
for u in x[x == 0]:
print(0)
使用numpy的优势在于它可以满足您的所有数字需求。
或者你可以使用发电机:
x = [-10, 5, -5, 10, 0, 0]
gen_x_pos = (u for u in x if u > 0)
for u in gen_x_pos:
print(u)
答案 2 :(得分:1)
你的数组是numpy数组。
y=np.array([[-20., -15., -10., -5., 0., 5., 10., 15., 20.]])
x= np.array( [[-20., -15., -10., -5., 0., 5., 10., 15., 20.]])
Q1=8
Q2 =12
print(y>0.0)
# [[False False False False False True True True True]]
print(x-y > -Q1)
#[[ True True True True True True True True True]]
y>0 and x-y >= -Q1
给出了一个错误:您使用的是Python and
- 在两个布尔值之间运行 - 在两个数组之间。
所以Python试图将你的数组转换为布尔值,但不知道你的意思
如果数组True
的元素all
是True
,或者any
的{{1}}是True
,那么该数组是print(all(y>0.0))
# False
print(all(x-y > -Q1))
# True
print(all(y>0.0) and all(x-y > -Q1))
# False
吗?
如果您的意思是“所有这些都必须为True&#39;”,您可以这样做:
and
在使用all
或any
之前,您还可以在表格中按元素制作符合逻辑的print(all((y>0.0) & (x-y > -Q1)))
# False
元素:
condition = (y>0.0) & (x-y > -Q1)
valid_x = np.extract(condition, x)
valid_y = np.extract(condition, y)
print(valid_x, valid_y)
# [ 5. 10. 15. 20.] [ 5. 10. 15. 20.]
如果要为满足两个条件的(x,y)对执行函数,可以这样做:
public void stateChanged(final ChangeEvent evt) {
答案 3 :(得分:1)
我认为这就是你想要的,但是你没有指定你的输出。
def sum_function(x,y):
return x[:, None] + y[None, :] # or however you want to add them, broadcasted to 2D
def myFilter(x,y):
x, y = x.squeeze(), y.squeeze()
out=np.zeros((x.size,y.size))
xyDiff = x[:, None] - y[None, :]
out=np.where(np.bitwise_and(y[None, :] => 0.0, xyDiff >= -Q1), sum_function(x, y), out) # unless the sum functions are different
out=np.where(np.bitwise_and(y[None, :] < 0.0, xyDiff >= -Q2), sum_function(x, y), out)
return out
答案 4 :(得分:0)
直接将是(伪代码):
for element in array:
if element > 0: