问题描述
我正在尝试将切片数组合并到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])
+
用于连接列表。对于数组是加法(数字和)。
您的问题不应该草率地使用list
和array
。它们是不同的东西(在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])