Python 如何在多维numpy数组中连接单个维度
执行后,它返回: ValueError:使用序列设置数组元素 基本上,我希望lows数组是一个大数组,在这里,我根据每次迭代的前置时间(此处未显示)添加较小的临时数组。例如,在迭代1中,我希望将温度下限[0]中的值添加到下限[0],并将温度下限[1]中的值添加到下限[1],依此类推。 现在的问题是,我似乎找不到一个解决方案来不断地在正确的维度中添加较小的数组 编辑1:Python 如何在多维numpy数组中连接单个维度,python,arrays,numpy,concatenation,valueerror,Python,Arrays,Numpy,Concatenation,Valueerror,执行后,它返回: ValueError:使用序列设置数组元素 基本上,我希望lows数组是一个大数组,在这里,我根据每次迭代的前置时间(此处未显示)添加较小的临时数组。例如,在迭代1中,我希望将温度下限[0]中的值添加到下限[0],并将温度下限[1]中的值添加到下限[1],依此类推。 现在的问题是,我似乎找不到一个解决方案来不断地在正确的维度中添加较小的数组 编辑1: 我的问题不准确。temp_lows包含特定提前期的数据,我称之为“提前期”。现在,对于每一次迭代,我希望我在这个迭代(temp_
我的问题不准确。temp_lows包含特定提前期的数据,我称之为“提前期”。现在,对于每一次迭代,我希望我在这个迭代(temp_lows)中处理的数据在正确的前置时间添加到lows数组中,以一种连续列表的方式。我将使用这些列表(导联0到9)生成一个PDF函数。创建另一个数组可能更容易,最终答案如下:
lows = np.array([0 for lead in range(10)])
temp_lows = np.array([[1 for points in range(12)] for lead in range(10)]) # Ones are only a placeholder. temp_lows is filled with random int (data)
for lead in range(10):
lows[lead] = np.concatenate((lows[lead], temp_lows[lead]), axis=None)
我不确定我是否完全遵循了编辑的逻辑,也许一些实际数据和预期结果将有助于澄清这一点。
同时,也许这更像你要找的
>>> newLows = np.concatenate((lows[:,np.newaxis], temp_lows), axis=1)
>>> newLows
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
这里的问题是
np.连接((低位[导程]、低位[导程]、轴=无)
返回一个数组,您正试图将该结果放入数组的单个元素槽lows
。我看不出这有什么意义,因为每一行都是一样的:
[011]
有更好的方法来实现这一结果,例如:
a=np.one(shape=(10,13),dtype=np.int64)
>>>a[:,0]=1
>>>a
[[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 1 1 1 1]]
以下是扩展列表的正确列表方式:
>>> newLows = np.array([np.concatenate((lows[lead], temp_lows[lead]), axis=None) for lead in range(10)])
...
>>> newLows
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
按照我的提问方式,这将是正确的答案。很抱歉,我不清楚,但这些只是我处理的数据的占位符。请检查我的编辑,在那里我让问题更清楚了(希望)。@MrFrogmog数据形状是一样的吗?low是int32的数组(10),temp_low是int32的数组(10,32),这就是你的意思吗?@MrFrogmog,不确定你是否看到了它,但是我确实在我的答案中发布了第二个解决方案,它应该与您的原始代码所尝试的一样。我认为这很接近,但是如果我想按照我的要求用另一个数组(一维,在本例中是下一次迭代的温度)扩展每一行(数组元素),这将是正确的答案。很抱歉,我不清楚,但这些只是我处理的数据的占位符。请检查我的编辑,我把问题弄清楚了(希望如此)。这更像是python列表方法。Numpy数组不是这样使用的。
In [311]: lows = [[0] for lead in range(10)]
...: temp_lows = [[1 for points in range(12)] for lead in range(10)]
...: for lead in range(5):
...: lows[lead].extend(temp_lows[lead])
...:
In [312]: lows
Out[312]:
[[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0],
[0],
[0],
[0],
[0]]