Python 无法使用numpy展平阵列
我的输出如下:Python 无法使用numpy展平阵列,python,arrays,numpy,Python,Arrays,Numpy,我的输出如下: data = [array([1. , 1.14112001, 0.7205845 , 1.41211849, 0.46342708, 1.65028784, 0.24901275]), array([1.83665564, 0.09442164, 1.95637593, 0.01196838, 1.99991186, 0.00822115, 1.96379539]), array([0.08347845, 1.85090352,
data = [array([1. , 1.14112001, 0.7205845 , 1.41211849, 0.46342708,
1.65028784, 0.24901275]),
array([1.83665564, 0.09442164, 1.95637593, 0.01196838, 1.99991186,
0.00822115, 1.96379539]),
array([0.08347845, 1.85090352, 0.23174534, 1.67022918, 0.44121095,
1.43616476])]
这是一个包含3个数组的列表。我得把阵列展平。这应该很简单,如数据。展平(“F”)
但它不起作用
输出应该包含每个数组的第一个元素,然后是第二个元素,依此类推
类似于:1,1.83665564,1.14112001,0.09442164,1.85090352
等等。我该怎么做
更新:
我用给定代码得到的输出如下
array([array([1. , 1.14112001, 0.7205845 , 1.41211849, 0.46342708,
1.65028784, 0.24901275]),
array([1.83665564, 0.09442164, 1.95637593, 0.01196838, 1.99991186,
0.00822115, 1.96379539]),
array([0.08347845, 1.85090352, 0.23174534, 1.67022918, 0.44121095,
1.43616476])], dtype=object)
输出:
[1.0, 1.83665564, 0.08347845, 1.14112001, 0.09442164, 1.85090352, 0.7205845, 1.95637593, 0.23174534, 1.41211849, 0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095, 1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539]
输出:
[1.0, 1.83665564, 0.08347845, 1.14112001, 0.09442164, 1.85090352, 0.7205845, 1.95637593, 0.23174534, 1.41211849, 0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095, 1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539]
不知道是否是最好的解决方案,但您可以使用
np.resize
将所有数组重塑为相同长度并垂直堆叠。然后使用.T
以列为基础将其展平,并使用掩码排除由np创建的值。调整大小
:
l = max(x.size for x in data)
masks = [np.arange(l) < x.size for x in data]
np.vstack(np.resize(x, l) for x in data).T.flatten()[np.vstack(masks).T.flatten()]
>> array([1. , 1.83665564, 0.08347845, 1.14112001, 0.09442164,
1.85090352, 0.7205845 , 1.95637593, 0.23174534, 1.41211849,
0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095,
1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539])
l=max(数据中x的x.size)
掩码=[np.arange(l)>阵列([1,1.83665564,0.08347845,1.14112001,0.09442164,
1.85090352, 0.7205845 , 1.95637593, 0.23174534, 1.41211849,
0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095,
1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539])
不知道是否是最佳解决方案,但您可以使用np.resize
将所有数组重塑为相同长度,并垂直堆叠。然后使用.T
以列为基础将其展平,并使用掩码排除由np创建的值。调整大小
:
l = max(x.size for x in data)
masks = [np.arange(l) < x.size for x in data]
np.vstack(np.resize(x, l) for x in data).T.flatten()[np.vstack(masks).T.flatten()]
>> array([1. , 1.83665564, 0.08347845, 1.14112001, 0.09442164,
1.85090352, 0.7205845 , 1.95637593, 0.23174534, 1.41211849,
0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095,
1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539])
l=max(数据中x的x.size)
掩码=[np.arange(l)>阵列([1,1.83665564,0.08347845,1.14112001,0.09442164,
1.85090352, 0.7205845 , 1.95637593, 0.23174534, 1.41211849,
0.01196838, 1.67022918, 0.46342708, 1.99991186, 0.44121095,
1.65028784, 0.00822115, 1.43616476, 0.24901275, 1.96379539])
使用itertools.zip_按顺序获取不同长度数组中的元素(请参阅),然后使用列表理解来展平生成的元组
在Python 2中,我们应该改用itertools.izip_
>>> from itertools import zip_longest
>>> from numpy import array
# three sample arrays make up a list from 1 to 11
>>> data = array([array([1,4,7,10]), array([2,5,8,11]), array([3,6,9])])
>>> temp = list(zip_longest(*data, fillvalue=None))
>>> temp
[(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, None)]
>>> [i for tup in temp for i in tup if i is not None]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
使用itertools.zip_longest按顺序获取不同长度数组中的元素(请参见),然后使用列表理解来展平生成的元组 在Python 2中,我们应该改用itertools.izip_
>>> from itertools import zip_longest
>>> from numpy import array
# three sample arrays make up a list from 1 to 11
>>> data = array([array([1,4,7,10]), array([2,5,8,11]), array([3,6,9])])
>>> temp = list(zip_longest(*data, fillvalue=None))
>>> temp
[(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, None)]
>>> [i for tup in temp for i in tup if i is not None]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
数组大小不一样我不清楚要以什么模式连接索引。请在您的示例中添加更多步骤,或者尝试将其正式概括。您说您尝试了
data.flatten(“F”)
。但是data
是一个Python列表,而不是numpy数组。Python列表没有展平方法。np.hstack(arr)
应该可以工作。您有一个数组,因此通常的重塑
和展平
方法不起作用hstack
或连接
将其视为数组的列表或序列。元素较少的数组会发生什么情况?数组大小不同我不清楚要以什么模式连接索引。请在您的示例中添加更多步骤,或者尝试将其正式概括。您说您尝试了data.flatten(“F”)
。但是data
是一个Python列表,而不是numpy数组。Python列表没有展平方法。np.hstack(arr)
应该可以工作。您有一个数组,因此通常的重塑
和展平
方法不起作用hstack
或连接
将其视为数组的列表或序列。元素较少的数组会发生什么情况?