Python 交换翻转的数组元素的有效方法

Python 交换翻转的数组元素的有效方法,python,arrays,sorting,conditional-statements,list-comprehension,Python,Arrays,Sorting,Conditional Statements,List Comprehension,假设有一组点有可能对称翻转(如下所示) 我如何自动检查每个数组元素并编写一个条件来纠正这些点的位置,假设我们知道它应该是什么形式 编辑: 这是我想要得到的图表 对于本例,它将起作用 a = np.absolute(a) b = np.absolute(b) c = -np.absolute(c) d = -np.absolute(d) 但在其他情况下,可能需要为不同的列表减去。所以,识别哪个列表需要减号可能是个大问题 更好的方法是创建成对的(x,y),然后按x>0x0y

假设有一组点有可能对称翻转(如下所示)

我如何自动检查每个数组元素并编写一个条件来纠正这些点的位置,假设我们知道它应该是什么形式

编辑:

这是我想要得到的图表


对于本例,它将起作用

a = np.absolute(a)
b = np.absolute(b)
c = -np.absolute(c)
d = -np.absolute(d)
但在其他情况下,可能需要为不同的列表减去
。所以,识别哪个列表需要减号可能是个大问题

更好的方法是创建成对的
(x,y)
,然后按
x>0
x<0
(或
y>0
y<0
)将成对的对象拆分为两个列表,然后再将成对的对象转换回列表
x
y

(也许有了numpy,你可以做得更简单更快)


最小工作代码

import numpy as np
import matplotlib.pyplot as plt

# Data
a = np.array([0.1,-0.325,-0.55,0.775,1])  # x-axis
b = np.array([10,-3.077,-1.818,1.2903,1]) # y-axis
c = np.array([-0.1,0.325,0.55,-0.775,-1]) # x-axis
d = np.array([-10,3.077,1.818,-1.2903,-1])# y-axis

all_pairs = list(zip(a,b)) + list(zip(c,d))
print(all_pairs)

higher = []
lower = []
for pair in all_pairs:
    if pair[0] > 0:
        higher.append(pair)
    else:
        lower.append(pair)
        
print(higher)
print(lower)

a, b = list(zip(*higher))
c, d = list(zip(*lower))
    
y = [a,b,c,d] # The array is created this way intentionally for when I apply it to my case
    
#plt.plot(y[0],y[1],'k.')
#plt.plot(y[2],y[3],'r.')

plt.plot(*y[0:2], 'k.')
plt.plot(*y[2:4], 'r.')

plt.show()

你到底知道什么?我“知道”这些点应该被翻转,这样红点和黑点就可以跟随它们自己的趋势。编辑:对于我正在尝试解决的问题,我有一个程序可以为我提供解决方案,但不一定按照正确的顺序,因此我必须找出在找到解决方案后如何更正数组。也许你应该创建一个包含成对
(x,y)的列表
并将其分为两个列表-第一个列表为
y<0
,第二个列表为
y>0
(或者第一个列表为
x<0
,第二个列表为
x>0
)。或者您应该运行函数,检查
b
中的值并将其全部更改为
abs(y)
,第二个函数检查
d
并将其全部更改为
-abs(y)
。谢谢您的建议,您实际上给了我一个想法,我认为解决了我的问题。如果我在别人评论答案之前就想出来了,那么发布我的解决方案对我来说是一种好的做法吗?或者我应该删除我的问题吗?若你们解决了问题,那个么你们可以把它作为答案发送,然后你们可以把它标记为接受,也许几分钟后你们可以投票表决。这样你可以得到更多的分数(声誉分数)
all_pairs = list(zip(a,b)) + list(zip(c,d))

# ---

lower = []
higher = []
for pair in all_pairs:
    if pair[0] > 0:
        higher.append(pair)
    else:
        lower.append(pair)

# ---

a, b = list(zip(*higher))
c, d = list(zip(*lower))
import numpy as np
import matplotlib.pyplot as plt

# Data
a = np.array([0.1,-0.325,-0.55,0.775,1])  # x-axis
b = np.array([10,-3.077,-1.818,1.2903,1]) # y-axis
c = np.array([-0.1,0.325,0.55,-0.775,-1]) # x-axis
d = np.array([-10,3.077,1.818,-1.2903,-1])# y-axis

all_pairs = list(zip(a,b)) + list(zip(c,d))
print(all_pairs)

higher = []
lower = []
for pair in all_pairs:
    if pair[0] > 0:
        higher.append(pair)
    else:
        lower.append(pair)
        
print(higher)
print(lower)

a, b = list(zip(*higher))
c, d = list(zip(*lower))
    
y = [a,b,c,d] # The array is created this way intentionally for when I apply it to my case
    
#plt.plot(y[0],y[1],'k.')
#plt.plot(y[2],y[3],'r.')

plt.plot(*y[0:2], 'k.')
plt.plot(*y[2:4], 'r.')

plt.show()