我有以下array
,想repeat
array
n
次。
x_array
[array([14.91488012, 1.2986064 , 4.98965322]),
array([2.39389187e+02, 1.04442059e-01, 3.06391338e-01]),
array([ 48.19437348, 201.09951372, 0.35223001]),
array([ 19.96978171, 367.52578786, 0.68676553]),
array([0.55120466, 0.27133609, 0.75646697]),
array([8.21287360e+02, 1.76495077e+02, 4.87263691e-01]),
array([184.03439377, 1.24823107, 5.33109884]),
array([575.59800297, 186.4650814 , 2.21028258]),
array([0.50308552, 3.09976082, 0.10537899]),
array([1.02259912e+00, 1.52282513e+02, 1.15085308e-01])]
我已经尝试过np.repeat(x_array, 2)
但这并不能保留matrix
/array
的顺序。我也尝试过x_array*2
,但这似乎只是将新数组放在底部。我跳到重复x_array[0]
n
次,并为下一组arrays
做同样的事情,这样我就可以按顺序n
每个总数。提前谢谢。
以 https://numpy.org/doc/stable/reference/generated/numpy.repeat.html 的最后一个示例为基础,
x_array = np.array(x_array) # Or a similiar operation to convert x_array to an ndarray vs. a list of arrays.
expanded_x_array = np.repeat(x_array, n, axis=0)
print(expanded_x_array)
应该产生你正在寻找的东西。
您只需要指定轴:
>>> np.repeat(x_array, 2, axis=0)
array([[1.49149e+01, 1.29861e+00, 4.98965e+00],
[1.49149e+01, 1.29861e+00, 4.98965e+00],
[2.39389e+02, 1.04442e-01, 3.06391e-01],
[2.39389e+02, 1.04442e-01, 3.06391e-01],
...,
[5.03086e-01, 3.09976e+00, 1.05379e-01],
[5.03086e-01, 3.09976e+00, 1.05379e-01],
[1.02260e+00, 1.52283e+02, 1.15085e-01],
[1.02260e+00, 1.52283e+02, 1.15085e-01]])
从文档中:
numpy.repeat(a, repeats, axis=None)
。
轴int,可选
要沿其重复值的轴。默认情况下,使用平展输入数组,并返回平面输出数组。
(加粗)
您可以使用列表推导:
n = 2
repeated_list = [row for row in a for _ in range(n)]
print(repeated_list)
您的术语令人困惑。 你说它是一个"数组",但显示看起来更像是一个列表,而x_array*2
在底部放置一个"新数组"的事实证实了这一点 - 这是*
的列表使用.
np.repeat(x_array)
首先创建一个数组(一个真实的数组!
np.array(x_array)
是一个 (n,3) 浮点型 dtype 数组。 没有axis
np.repeat
扁平化 - 如记录的那样!
指定axis=0
有效,因为它在第一个n
维度上重复。 结果是一个 (2*n,3) 浮点 dtype 数组(不是列表)。
可以制作一个包含这些数组的一维对象 dtype 数组。 有了这个repeat
就可以在没有轴参数的情况下工作。
知道你拥有什么,并准确地描述它,可以使这种任务更容易 - 并且问题更清晰。
插图
列出数组:
In [21]: alist = [np.ones(3,int),np.zeros(3,int),np.arange(3)]
In [22]: alist
Out[22]: [array([1, 1, 1]), array([0, 0, 0]), array([0, 1, 2])]
列表重复:
In [23]: alist*2
Out[23]:
[array([1, 1, 1]),
array([0, 0, 0]),
array([0, 1, 2]),
array([1, 1, 1]),
array([0, 0, 0]),
array([0, 1, 2])]
从列表中创建一个 2D 数组:
In [24]: np.array(alist)
Out[24]:
array([[1, 1, 1],
[0, 0, 0],
[0, 1, 2]])
不带轴重复 以展平方式重复元素:
In [25]: np.repeat(alist,2)
Out[25]: array([1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2])
在 0 轴上重复此 2D 数组:
In [26]: np.repeat(alist,2,axis=0)
Out[26]:
array([[1, 1, 1],
[1, 1, 1],
[0, 0, 0],
[0, 0, 0],
[0, 1, 2],
[0, 1, 2]])
列表中的对象 dtype 数组:
In [27]: arr = np.empty(3,object); arr[:]=alist
In [28]: arr
Out[28]: array([array([1, 1, 1]), array([0, 0, 0]), array([0, 1, 2])], dtype=object)
由于数组具有相同的大小,因此我们必须使用这种特殊的构造。 否则我们会得到 2d 数组 [24]。
这个数组有一个repeat
方法,只有一个维度,我们不需要指定轴。 它重复对象元素、数组,而不是 2d [24] 数组中的数字。
In [29]: arr.repeat(2)
Out[29]:
array([array([1, 1, 1]), array([1, 1, 1]), array([0, 0, 0]),
array([0, 0, 0]), array([0, 1, 2]), array([0, 1, 2])], dtype=object)