从 Python 中的现有 2D 数组创建 3D 数组
Create 3D array from existing 2D array in Python
我正在尝试创建一个维度数组:
a(Days,Hours,Station)
我有 61 天内 2 个站的阵列 'a' 的每小时数据,所以目前我有这些尺寸的阵列:
a(1464,2)
其中1464是我拥有的每个站点的每小时数据点数(24小时*61天)。但是我想进一步分解它并添加另一个具有天数的维度,因此维度将是:
a(61 days,24 hours/day, 2 stations)
关于如何正确获取我当前拥有的数组 'a' 并将其更改为这 3 个维度的任何想法?
您可以尝试制作一个 61x24x2 的阵列。这应该有效:
b = []
for i in xrange(61):
b.append(a[i*61:(i+1)*61])
如果您的第一个字段是 小时 * 天 ,则转换很简单:
a(x, y) => a(x // 24, x % 24, y)
x // 24
是楼层划分所以1500 // 24 = 62
,天。您没有指定,但我假设 "Hours" 字段是剩余时间;所以 x % 24
得到剩余小时数,1500 % 25 = 12
得到小时数。最后,站点字段保持不变。
我认为您不能修改 Python 中 list/array 的结构,因此您需要创建一个新结构。我也不确定您是否真的在使用内置的 list 或 array。我对 array class 不太熟悉,所以这不是一个完整的答案,但我希望它能在算术上为您指明正确的方向。
这会将数组 a
拆分为最大长度 size
的块。
def chunks( a, size ):
arr = iter( a )
for v in arr:
tmp = [ v ]
for i,v in zip( range( size - 1 ), arr ):
tmp.append( v )
yield tmp
splitted = list( chunks( a, 24 ) )
我正在尝试创建一个维度数组:
a(Days,Hours,Station)
我有 61 天内 2 个站的阵列 'a' 的每小时数据,所以目前我有这些尺寸的阵列:
a(1464,2)
其中1464是我拥有的每个站点的每小时数据点数(24小时*61天)。但是我想进一步分解它并添加另一个具有天数的维度,因此维度将是:
a(61 days,24 hours/day, 2 stations)
关于如何正确获取我当前拥有的数组 'a' 并将其更改为这 3 个维度的任何想法?
您可以尝试制作一个 61x24x2 的阵列。这应该有效:
b = []
for i in xrange(61):
b.append(a[i*61:(i+1)*61])
如果您的第一个字段是 小时 * 天 ,则转换很简单: a(x, y) => a(x // 24, x % 24, y)
x // 24
是楼层划分所以1500 // 24 = 62
,天。您没有指定,但我假设 "Hours" 字段是剩余时间;所以 x % 24
得到剩余小时数,1500 % 25 = 12
得到小时数。最后,站点字段保持不变。
我认为您不能修改 Python 中 list/array 的结构,因此您需要创建一个新结构。我也不确定您是否真的在使用内置的 list 或 array。我对 array class 不太熟悉,所以这不是一个完整的答案,但我希望它能在算术上为您指明正确的方向。
这会将数组 a
拆分为最大长度 size
的块。
def chunks( a, size ):
arr = iter( a )
for v in arr:
tmp = [ v ]
for i,v in zip( range( size - 1 ), arr ):
tmp.append( v )
yield tmp
splitted = list( chunks( a, 24 ) )