我目前遇到了一个关于Numpy数组的问题。如果这个问题已经在其他地方被问到了,我很抱歉,但是我觉得我已经到处找过了。
我最初遇到的问题是,我试图创建一个数组,并用不同大小的多组站点数据填充它。由于我无法用不同大小的数据集填充同一个数组,我决定需要通过在for循环中定义数组来为每个站点数据集创建一个新数组,我正在使用for循环来迭代每个站点数据集。这样做的问题是,在循环时,每个数据集将覆盖前一个数据集,只返回for循环的最后一个示例。
然后,我尝试使用+和join操作为每个数组连接一个新的标题,但结果发现在定义数组时这是非法的。这是程序的一个示例,其中每个数据数组覆盖前一个数组。注意,并不是所有的代码都包括在内,这是定义的一部分。
for k in range(len(stat_id)):
## NOTE - more code precedes this final portion of the for loop, but was
## not included as it is unrelated to the issue at hand.
# Bring all the data into one big array.
metar_dat = np.zeros((len(stat_id),len(temp),7), dtype='object')
for i in range(len(temp)):
metar_dat[k,i] = np.dstack((stat_id[k], yr[i], month[i], day[i], time[i], temp[i], dwp[i]))
#print np.shape(metar_dat[k])
#print metar_dat[k]
#print np.shape(metar_dat) # Confirm success with shape read.
return metar_dat
在运行并打印此定义中的数组时,我得到了以下结果(两个空数组和一个最终填充的数组):
[[[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 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]]
[[\TZR 2015 7 ..., 2342 58 48]
[\TZR 2015 7 ..., 2300 59 47]
[\TZR 2015 7 ..., 2200 60 48]
...,
[\TZR 2015 7 ..., 0042 56 56]
[\TZR 2015 7 ..., 0022 56 56]
[\TZR 2015 7 ..., 0000 56 56]]]
我的问题是:
如何为每组桩号数据创建一个数组,以便不覆盖以前的任何数据?
或者
如何创建包含不同行数的数据集的单个数组?
我还是Python的新手(也是在这里发帖的新手),任何想法都将非常感谢。
3条答案
按热度按时间l0oc07j21#
每次在k-循环内将二维数组设置为零,在嵌套循环外将其设置为零(或者空,如果所有元素都被填充,就像你的例子一样),应该没问题:
l7mqbcuq2#
你得到一个
metar_dat
数组,大部分是0,因为它是你在最后一次k
迭代中创建的。它的长度是len(stat_id)
(在第一维中),但你只插入了最后一个k
的数据。你丢弃了前面k
的结果。我建议在字典中收集数据,而不是对象数组。
如果每个
id
的len(temp)
都不相同,你就不能用(len(stat_id), len(temp), 7)
的形状来构造一个有意义的三维数组--除非你把每个len(temp)
填充到相同的最大长度。Python字典是通过某种唯一id收集信息的更好方法。
对象数组可以让你概括数字数组的概念,但是与列表或字典相比,它们并没有提供太多的附加功能。例如,你不能在'id'维度上添加值。
你需要描述你收集这些数据后希望做什么,这将有助于指导我们关于数据表示的建议。
还有其他方法来定义每个
id
的数据结构。看起来yr
,time
,temp
是等长数组。如果它们都是数字,可以将它们收集到一个6列数组中。如果需要保留一些整数,而其他是浮点数(甚至是字符串),则可以使用结构化数组。结构化数组通常是通过从csv文件中读取列数据生成的。有些列包含字符串数据(id),有些包含整数甚至日期,还有一些包含浮点数据。
np.genfromtxt
是加载这类文件的好工具。wydwbb8l3#
你也可以看看这篇文章,
How can I make multiple empty arrays in python?
查找列表解析
listOfLists = [[] for i in range(N)]现在,listOfLists中有N个空列表