Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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 在特定位置拆分nump数组_Python_Arrays_Python 3.x_Numpy - Fatal编程技术网

Python 在特定位置拆分nump数组

Python 在特定位置拆分nump数组,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,嘿,我基本上有这样一个问题: 我有一个numpy数组,其中包含一个值矩阵,例如: Data = np.array([ [3, 0, 1, 5], [0, 0, 0, 7], [0, 3, 0, 0], [0, 0, 0, 6], [5, 1, 0, 0]]) 使用另一个数组,我想提取特定值并将它们相加,这有点难以解释,因此我仅举一个例子: values = np.array([3,1,3,4,2]) 这意味着我们需要第一行的前3个值,第二行的第一个值,

嘿,我基本上有这样一个问题:

我有一个numpy数组,其中包含一个值矩阵,例如:

Data = np.array([
    [3, 0, 1, 5],
    [0, 0, 0, 7],
    [0, 3, 0, 0],
    [0, 0, 0, 6],
    [5, 1, 0, 0]])
使用另一个数组,我想提取特定值并将它们相加,这有点难以解释,因此我仅举一个例子:

values = np.array([3,1,3,4,2])
这意味着我们需要第一行的前3个值,第二行的第一个值,第三行的前3个值,第四行的前4个值和最后一行的前2个值,所以我们只需要以下数据:

final_data = np.array([
    [3, 0, 1],
    [0],
    [0, 3, 0],
    [0, 0, 0, 6],
    [5, 1]])
然后我们想要得到这些值的总和,在这种情况下,总和将是19

有什么简单的方法可以做到这一点吗?此外,数据的大小并不总是相同的,因此我不能有任何固定的变量。

您可以尝试:

sum([Data[i, :j].sum() for i, j in enumerate(values)])

您可以通过高级索引来实现这一点。在从阵列中提取高级坐标之前,可以单独计算这些坐标

明确地:

Data = np.array([
    [3, 0, 1, 5],
    [0, 0, 0, 7],
    [0, 3, 0, 0],
    [0, 0, 0, 6],
    [5, 1, 0, 0]])
values = np.array([3,1,3,4,2])
X = [0,0,0,1,2,2,2,3,3,3,3,4,4]
Y = [0,1,2,0,0,1,2,0,1,2,3,0,1]
Data[X,Y]
注意:X是访问每行的次数,Y是使用每个X访问的列。这些可以直接从值计算:

X = np.concatenate([[n]*i for n,i in enumerate(values)])
Y = np.concatenate([np.arange(i) for i in values])
更好的答案是:

Data[np.arange(Data.shape[1])<values[:,None]].sum()

Data[np.arange(Data.shape[1])这很有效,谢谢。这很好,但是你可能想用
np.arange(values.max())
替换
np.arange(Data.shape[1])
。否则如果
values.max()
小于
数据的数量或列数,它就会失败。是的,这一点不错。