Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy广播规则的解决方法_Python_Numpy_Numpy Ndarray - Fatal编程技术网

Python numpy广播规则的解决方法

Python numpy广播规则的解决方法,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我目前正在分析一项研究的一些数据。本研究共有27名参与者,每个参与者的数据都表示为一个三维numpy数组。例如,参与者1的数据具有形状(22、59、751)。我想将所有这27个数组组合成一个具有形状(22,59751,27)的4维数组。我所做的是初始化一个新的4D数组,数组中填充了0 comb_data = np.zeros((22, 59, 751, 27)) 然后我循环遍历每个数组,然后将其分配到相应的位置 for i, participant in enumerate(control_f

我目前正在分析一项研究的一些数据。本研究共有27名参与者,每个参与者的数据都表示为一个三维numpy数组。例如,参与者1的数据具有形状(22、59、751)。我想将所有这27个数组组合成一个具有形状(22,59751,27)的4维数组。我所做的是初始化一个新的4D数组,数组中填充了0

comb_data = np.zeros((22, 59, 751, 27))
然后我循环遍历每个数组,然后将其分配到相应的位置

for i, participant in enumerate(control_files):
    comb_data[:, :, :, i] = np.load(os.path.join(path_control, participant))[:, :, :]
但是,某些阵列具有不同的形状大小(由于数据收集中的问题)。因此,我现在面对的情况是:

ValueError: could not broadcast input array from shape (15,59,751) into shape (22,59,751)

我希望尽可能分配数组,然后填充/保留剩余的0。解决这种情况的可能方法是什么?。还有什么方法可以让“较小”数组自动将0值填充到“较大”数组中吗?

如果已经用0填充了空间,只需限制给定数组的大小即可

for i, participant in enumerate(control_files):
    a,b,c = participant.shape
    comb_data[:a, :b, :c, i] = np.load(os.path.join(path_control, participant))[:, :, :]

不幸的是,numpy不会将X形张量任意转换成Y形张量,自动填充零。这主要是因为有数千种方法来填充零,不必系统化。

当然,首先需要知道最大的形状,然后初始化零矩阵并根据每个元素的形状复制其尺寸

data\u list=[np.load(os.path.join(path\u control,p))用于控制文件中的p]
最大形状=np.max(np.array([m.shape代表数据列表中的m]),轴=0
comb_data=np.zeros([len(数据列表)]+最大的形状tolist())
对于枚举中的i,m(数据列表):
梳形数据[i,:m.shape[0],:m.shape[1],:m.shape[2]=m

在这个例子中,我把每个人的索引放在第一位,但你也可以放在最后。

谢谢,所以这只是一个索引的简单例子。是的,补充了一点解释。