如何在Python中将切片数组连接到列表

问题描述

我正在尝试将切片数组合并到Python中的列表,但是我得到了

#include "Date.h"

// Date constructor
Date::Date(int year,int month,int day)
{
    SetDate(year,month,day);
}

// Date member function
void Date::SetDate(int year,int day)
{
    m_month = month;
    m_day = day;
    m_year = year;
}

// If you choose to move their deFinitions here...
/*
int Date::getYear()
{
    return m_year;
}

int Date::getMonth()
{
    return m_month;
}

int Date::getDay()
{
    return m_day;
}
*/

这是我的代码

 error: ValueError: operands Could not be broadcast together with shapes `(4,)` `(2,)` . 

我希望获得一个向左移动2个项目的向量,并将最后2个项目分配为0。

解决方法

Numpy数组的工作方式类似于矩阵。因此,当您尝试将加法运算应用于numpy数组时,实际上是在执行“逐元素加法”。这就是为什么您用numpy数组添加的值必须与numpy数组的维相同。否则,可以广播的值。

请注意示例以了解我的意思。

添加两个带有加号的列表:

>>> [1,2] + [3,4]
[1,2,3,4]

添加两个numpy数组:

>>> np.array([1,2]) + np.array([3,4])
array([4,6])

要完成工作,请使用np.append(arr,val,axis)函数。 Documentation

array([1,4])
>>> np.append([1,2],np.array([3,4]))
array([1,4])
,

要连接数组,请使用np.concatenate

In [93]: y = np.array([5,4,6,1])
In [94]: y[2:6]
Out[94]: array([2,1])
In [95]: np.concatenate((y[2:6],np.array([0,0])))
Out[95]: array([2,1,0])

+用于连接列表。对于数组是加法(数字和)。

您的问题不应该草率​​地使用listarray。它们是不同的东西(在python / numpy中),并且会产生令人困惑的答案。

,

要进行串联,您需要先将numpy数组转换为列表。

row = y[2:6] + list(np.array([0,0]))

或等效地

row = y[2:6] + np.array([0,0]).tolist()

但是,如果您希望将两者相加(将列表和numpy数组叠加),则numpy数组只需与y [2:6]的形状相同:

In : y[2:6] + np.array([1,4])
Out: array([y[2] + 1,y[3] + 2,y[4] + 3,y[5] + 4])
,

其他答案已经解释了为什么您的代码失败。您可以这样做:

out = np.zeros_like(y)
out[:-2] = y[2:]

输出:

array([2,0])