take 4 individual 1D arrays, of length 7, 10, 13, and 16 together into a (7,10,13,16) array
在numpy 中,像(7,10,13,16) 这样的元组通常指的是shape。在这种情况下,它看起来像一个包含 7*10*13*16 个元素的 4 维数组。
但更现实的是,我认为您想要这 4 个数组的列表
[[1,2...,7], [0,2,...9], [1,...13], etc]
那些不能变成多维数组。这样的数组必须有相同数量的行、列等,而不是一个参差不齐的集合。
有dtype=object 的数组之类的东西,其中的元素可以是列表、数组、None 或任何 Python 对象。我几乎不愿意提及它,因为太多的 SO 问题似乎滥用了它。在大多数情况下,一个普通的 Python 列表也可以。
要获得更多帮助,您需要更清楚自己所寻求的。
当您说I've tried methods similar to the following, but to no avail. 之类的话时,您确实应该说出问题所在。你得到什么样的错误?错误信息?或者结果不是你想要的?细节(但不要太多!:))是一个很好的问题。
要创建一个“进程空间”,您可以执行以下操作:
小样本数组:
In [676]: heights=np.array([40,50])
In [677]: widths=np.array([60,65,70])
In [678]: yrs=np.array([1995,1996,1997,1998])
正确大小的全 0 空间:
In [679]: eff=np.zeros((2,3,4))
将所有值与公式相结合的“效率”计算
In [680]: eff1=(yrs-1994)[None,None,:]/(heights[:,None,None]+widths[None,:,None])
In [681]: eff1.shape
Out[681]: (2, 3, 4)
In [682]: eff1
Out[682]:
array([[[ 0.01 , 0.02 , 0.03 , 0.04 ],
[ 0.00952381, 0.01904762, 0.02857143, 0.03809524],
[ 0.00909091, 0.01818182, 0.02727273, 0.03636364]],
[[ 0.00909091, 0.01818182, 0.02727273, 0.03636364],
[ 0.00869565, 0.0173913 , 0.02608696, 0.03478261],
[ 0.00833333, 0.01666667, 0.025 , 0.03333333]]])
ix_ 是添加所有None 的便捷函数,将表达式简化为:
In [695]: H,W,Y=np.ix_(heights,widths, yrs)
In [696]: eff1=(Y-1994)/(H+W)
我可以轻松地将这些输入数组中的每一个转换为 (2,3,4) 数组:
HH, WW, YY = np.broadcast_arrays(H,W,Y)
但是,如果您正在设想一个带有行和列标签的复杂“表格”,则最好使用pandas。
构造“空间”的非 numpy 方法是使用 itertools.product
In [704]: import itertools
In [705]: list(itertools.product(heights,widths,yrs))
Out[705]:
[(40, 60, 1995),
(40, 60, 1996),
(40, 60, 1997),
(40, 60, 1998),
(40, 65, 1995),
(40, 65, 1996),
...
(50, 70, 1996),
(50, 70, 1997),
(50, 70, 1998)]