[英]numpy matrix of hour (24) and day (365)
我有两个向量; 一个用于一天[1,2,3,...,24]
中的小时,第二个用于一年中的[1,2,3,4,5,6,...,365]
我想构建一个24 * 365单元,24行和365列的矩阵。
就像是:
a = [(1,24),(2,24),(3,24),(4,24),(5,24),...,(365,24),
(1,23),(2,23),(3,23),(4,23),(5,23),...,(365,23),
(1,22),(2,22),(3,22),(4,22),(5,22),...,(365,22),
.,
.,
.,
.,
(1,1),(2,1),(3,1),(4,1),(5,1),...,(365,1)]
之后,我想应用一个函数f(x,y)
并用z
替换x,y
(保持相同的矩阵结构)。 最终,它将被转换为带有渐变的颜色图。
可能值得注意的是,虽然您可以将通用对象存储在numpy数组中,但这可能不是一个好主意-大多数算法已优化为在矩阵的每个插槽中都有一个值。
这样的结果是,您可能最终不会得到每个插槽中都有两个值的24 x 365元素矩阵,而最终会得到2 x 24 x 365元素的numpy数组。
一种类似的方法是:
hours = numpy.arange(365).reshape(1,-1).repeat(24,axis=0)
days = numpy.arange(24).reshape(-1,1).repeat(365,axis=1)
full = numpy.array([days, hours])
print full
print full.shape
这使:
[[[ 0 0 0 ..., 0 0 0]
[ 1 1 1 ..., 1 1 1]
[ 2 2 2 ..., 2 2 2]
...,
[ 21 21 21 ..., 21 21 21]
[ 22 22 22 ..., 22 22 22]
[ 23 23 23 ..., 23 23 23]]
[[ 0 1 2 ..., 362 363 364]
[ 0 1 2 ..., 362 363 364]
[ 0 1 2 ..., 362 363 364]
...,
[ 0 1 2 ..., 362 363 364]
[ 0 1 2 ..., 362 363 364]
[ 0 1 2 ..., 362 363 364]]]
(2, 24, 365)
尽管我完全同意@Andrew Walker(3-d数组将效率更高),但以下代码生成了您要求的数组:
import numpy as np
a = np.empty((24, 365), dtype=tuple)
for i, h in enumerate(range(24, 0, -1)):
for k, d in enumerate(range(1, 366)):
x[i, k] = (d, h)
尽管这种嵌套的for
循环效率低下并且肯定是不可避免的,但是创建此数组所需的时间却很短。 如果您需要一个更优化的版本(避免循环的版本),请在评论中说。
您可以使用与所需结构相同的数组:
a = np.mgrid[1:366, 24:0:-1].T
第一行和最后一行:
a[0]
array([[ 1, 24],
[ 2, 24],
[ 3, 24],
...,
[363, 24],
[364, 24],
[365, 24]])
a[-1]
array([[ 1, 1],
[ 2, 1],
[ 3, 1],
...,
[363, 1],
[364, 1],
[365, 1]])
以及第一列和最后一列:
a[:,0]
array([[ 1, 24],
[ 1, 23],
[ 1, 22],
...,
[ 1, 3],
[ 1, 2],
[ 1, 1]])
a[:,-1]
array([[365, 24],
[365, 23],
[365, 22],
...,
[365, 3],
[365, 2],
[365, 1]])
所有的日子和岁月:
a[...,0]
array([[ 1, 2, 3, ..., 363, 364, 365],
[ 1, 2, 3, ..., 363, 364, 365],
[ 1, 2, 3, ..., 363, 364, 365],
...,
[ 1, 2, 3, ..., 363, 364, 365],
[ 1, 2, 3, ..., 363, 364, 365],
[ 1, 2, 3, ..., 363, 364, 365]])
a[...,1]
array([[24, 24, 24, ..., 24, 24, 24],
[23, 23, 23, ..., 23, 23, 23],
[22, 22, 22, ..., 22, 22, 22],
...,
[ 3, 3, 3, ..., 3, 3, 3],
[ 2, 2, 2, ..., 2, 2, 2],
[ 1, 1, 1, ..., 1, 1, 1]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.