如何在一个列表中处理数组批量?

1 投票
3 回答
26 浏览
提问于 2025-04-14 16:01

我需要一个结果的列表,但输出的数据是数组。我想这就是为什么列表里全是“数组”的原因。我想把这个列表画成图,因为格式看起来很奇怪,所以我只能把第一个数据放进图里。

def slopee(x1,y1,x2,y2):
    x = (y2 - y1) / (x2 - x1)
    return x

b = []

for i in range(0,46,1):
    a = np.array(slopee(x[i],y[i],x[i + 4],y[i + 4]))
    if a>0:
        b.append(a)

print(b)

我得到了

[array(0.98788163), array(0.85617906), array(1.00844463), array(1.07600014), array(1.21457582), array(1.32036217), array(1.2688192), array(1.24681122), array(1.3372714), array(1.10813638), array(0.97427447), array(0.91985401), array(0.73667585), array(0.70897843), array(0.73550956), array(0.83783644), array(0.71404103), array(0.70594792), array(0.61123258), array(0.41485783), array(0.39642736), array(0.3770724), array(0.34367834), array(0.25310249), array(0.2509963), array(0.18238257), array(0.13032926), array(0.13804006), array(0.07159872), array(0.01911869)]

怎么才能得到一个没有数组的正常列表呢?

3 个回答

0

使用

b.append(a.tolist())

而不是

b.append(a)
0

与其一个一个地处理每对 (x_i, y_i),你可以直接对 x 和 y 进行操作(假设它们是 numpy 数组):

import numpy as np
np.random.seed(42)
x = np.random.randint(1, 10, 60)
y = np.random.randint(1, 10, 60)

def slopee(x1,y1,x2,y2):
    x = (y2 - y1) / (x2 - x1)
    return x

b = []

for i in range(0,46,1):
    a = np.array(slopee(x[i],y[i],x[i + 4],y[i + 4]))
    if a>0:
        b.append(a)

b2 = (y[4:50] - y[:46]) / (x[4:50] - x[:46])
b2 = b2[b2>0]
print(b)
print(b2)

打印输出

[array(4.), array(1.33333333), array(1.), array(3.5), array(2.66666667), array(0.71428571), array(0.75), array(2.), array(6.), array(0.5), array(inf), array(3.5), array(6.), array(1.), array(1.5), array(1.), array(0.8), array(0.4), array(0.14285714), array(0.66666667), array(2.), array(0.33333333)]
[4.         1.33333333 1.         3.5        2.66666667 0.71428571
 0.75       2.         6.         0.5               inf 3.5
 6.         1.         1.5        1.         0.8        0.4
 0.14285714 0.66666667 2.         0.33333333]

以下内容是正确的:

assert np.array_equal(b2, np.array([e.item() for e in b]))
0

只需要去掉 np.array。像这样:

x=list(range(51))
y=list(range(51))

def slopee(x1,y1,x2,y2):
    x=((y2 - y1) / (x2 - x1))
    return x

b = []

for i in range(0,46,1):
    a = slopee(x[i],y[i],x[i + 4],y[i + 4])
    if a>0:
        b.append(a)

print(b)

因为我没有你的 x 和 y 的数据,所以我随便编了一些,但这里是输出结果,格式是列表。

[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

撰写回答