gpt4 book ai didi

python - 棘手的 Python 数组排序

转载 作者:行者123 更新时间:2023-11-28 20:44:05 25 4
gpt4 key购买 nike

目前,我正在将一些数据加载到表单的内存中:

5.579158e-19    0   0
5.678307e-19 1 0
...
6.041513e-19 27 0
5.938317e-19 28 0
...
5.978803e-19 38 1
5.590008e-19 39 1
5.588807e-19 0 2
5.670948e-19 1 2
...

以此类推:

import numpy as np
data_res = np.genfromtxt('/path/data.csv',delimiter=';', dtype = float)

我想要的是一个 40x40 矩阵 mat,其中索引是第二列和第三列中的条目。第一个条目 mat[0,0] = data[0,0] 很简单,但问题是列表没有排序,第二列和第三列中的条目是 float ,所以我不能在切片。

我试过双 for 循环方法,但它不能正常工作。

mat = np.zeros((40,40))

for k in range(0,40):
for j in range(0,40):
mat[k,j] = data_res[k*j,0]

如果索引从 1-40 而不是 0-39 运行,此方法是否有效?

谢谢。

最佳答案

这可以在没有显式循环的情况下完成。我将使用较小的数据集,并创建一个 10x10 数组 mat。如果索引 (i,j) 不在 CSV 文件中,mat[i,j] 将为 0。

这是输入文件:

In [27]: !cat data.csv
0.1 0 0
0.2 1 0
0.3 7 0
0.4 8 0
0.5 8 1
0.6 9 1
0.7 0 2
0.8 1 2
0.9 9 9

使用genfromtxt将数据读入结构化数组,包含三个字段,valuesij .

In [28]: data = np.genfromtxt('data.csv', dtype=None, names=['values', 'i', 'j'])

通过使用 dtype=None,我们告诉 genfromtxt 根据在文件中找到的内容确定数据类型。在这种情况下,'values' 字段将是 float ,'i''j' 字段将是整数。

创建数组mat:

In [29]: mat = np.zeros((10, 10))

将数据分配给mat:

In [30]: mat[data['i'], data['j']] = data['values']

In [31]: mat
Out[31]:
array([[ 0.1, 0. , 0.7, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.2, 0. , 0.8, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.3, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.4, 0.5, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0.6, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.9]])

关于python - 棘手的 Python 数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27806577/

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