gpt4 book ai didi

python - 在Python中迭代二维数组?

转载 作者:行者123 更新时间:2023-12-01 03:04:56 26 4
gpt4 key购买 nike

我正在尝试在Python中迭代二维数组并将数组中的项目与整数进行比较,但是每当我尝试这样做时,我都会遇到大量各种错误。我正在使用 numpy 和 pandas。

我的数据集创建如下:

filename = "C:/Users/User/My Documents/JoeTest.csv"
datas = pandas.read_csv(filename)
dataset = datas.values

然后,我尝试遍历数据,获取其中的某些元素。

def model_building(data):
global blackKings
flag = 0;
blackKings.append(data[0][1])
for i in data:
if data[i][39] == 1:
if data[i][40] == 1:
values.append(1)
else:
values.append(-1)
else:
if data[i][40] == 1:
values.append(-1)
else:
values.append(1)
for j in blackKings:
if blackKings[j] != data[i][1]:
flag = 1
if flag == 1:
blackKings.append(data[i][1])
flag = 0;

但是,这样做给我带来了一个 ValueError:具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()。我不想使用其中任何一个,因为我希望比较该特定实例的实际值。还有其他方法可以解决这个问题吗?

最佳答案

您需要告诉我们一些相关信息:dataset = datas.values

它可能是一个二维数组,因为它源自 csv 的负载。但什么形状和类型呢?甚至可能是数组的样本。

这是函数中的data参数吗?

什么是 blackKingsvalues?您将它们视为列表(使用 append)。

for i in data:
if data[i][39] == 1:

这没有道理。 for i in data,如果data是2d,i是第一行,然后是第二行,依此类推。如果你想要i 在索引中,您可以使用类似

for i in range(data.shape[0]):

二维数组索引通常使用data[i,39]完成。

但在你的情况下 data[i][39] 可能是一个数组。

每当您在 if 语句中使用数组时,您都会收到此 ValueError,因为有多个值。

如果 i 是正确的索引,那么 data[i,39] 将是单个值。

举例说明:

In [41]: data=np.random.randint(0,4,(4,4))
In [42]: data
Out[42]:
array([[0, 3, 3, 2],
[2, 1, 0, 2],
[3, 2, 3, 1],
[1, 3, 3, 3]])
In [43]: for i in data:
...: print('i',i)
...: print('data[i]',data[i].shape)
...:
i [0 3 3 2] # 1st row
data[i] (4, 4)
i [2 1 0 2] # a 4d array
data[i] (4, 4)
...

这里i是一个4元素数组;使用它来索引 data[i] 实际上会生成一个 4 维数组;它不是选择一个值,而是选择许多值。

相反,您需要通过以下方式之一进行迭代:

In [46]: for row in data:
...: if row[3]==1:
...: print(row)
[3 2 3 1]
In [47]: for i in range(data.shape[0]):
...: if data[i,3]==1:
...: print(data[i])
[3 2 3 1]

要调试这样的问题,您需要查看中间值,尤其是它们的形状。不要只是假设。检查!

关于python - 在Python中迭代二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com