我知道有一个类似的问题已经被要求C#了,但有没有办法让我将单个1D向量(可能有不同长度)附加在一起形成一个多维数组?例如,我想将4个单独的1D阵列,长度分别为7,10,13和16组合成一个(7,10,13,16)阵列。
我尝试过类似以下的方法,但无济于事。
np.concatenate((data0[...,np.newaxis], data1[..., np.newaxis]), axis=2)
编辑1: 为了说明我的最终目标,我们假设您想知道汽车的效率。您有4个参数:车宽,车身高度,车身构成和车型年份。这些共同创造了一个可以改变汽车效率的工艺空间。每个参数由不同值的向量表示;每个向量具有不同数量的值元素。有了这个,你就有4个参数+汽车效率。我想构建这5个向量的(5D)数组。
答案 0 :(得分:0)
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
的数组,其中元素可以是列表,数组,无或任何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
。
构建空间的非笨拙方式。是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)]