Python中等距取出一个数组其中n个数 函数实现

应用场景:

实验中不断得到新数据,想将数据图形化,但随着时间推移,数据越来越多,

此时需要我们等距选择数据列表中固定数量的数据,来进行图形化。


注:保留首尾数据。

import numpy as np

a = np.arange(0, 10)
b = np.arange(0, 15)
c = np.arange(0, 20)
d = np.arange(0, 30)
e = np.arange(10, 40)
f = np.arange(0, 100)


def pick_arange(arange, num):
    if num > len(arange):
        print("# num out of length, return arange:", end=" ")
        return arange
    else:
        output = np.array([], dtype=arange.dtype)
        seg = len(arange) / num
        for n in range(num):
            if int(seg * (n+1)) >= len(arange):
                output = np.append(output, arange[-1])
            else:
                output = np.append(output, arange[int(seg * n)])
        print("# return new arange:", end=' ')
        return output


print(pick_arange(a, 10))
print(pick_arange(a, 11))
print(pick_arange(b, 10))
print(pick_arange(c, 10))
print(pick_arange(d, 10))
print(pick_arange(e, 10))
print(pick_arange(f, 10))
print(pick_arange(f, 20))

<think>好的,我现在需要帮助用户了解C++中的无构造函数的定义用法。首先,我得回忆一下用户提供的引用内容,看看哪些信息是有用的。用户引用了三个来源,其中引用[1]给出了一个类Test2的例子,里面有无构造函数、有构造函数拷贝构造函数实现。引用[2]解释了构造函数的基本概念,包括默认构造函数的作用,以及如果用户没有定义构造函数,编译器会自动生成一个无的默认构造函数。引用[3]讨论了无构造函数创建对象时构造函数析构函数的调用次数问题。 用户的问题很明确,想要了解无构造函数的定义使用教程。我需要先明确无构造函数的基本定义,然后结合例子来说明它的用法。根据引用[2],构造函数的主要任务是初始化对象,而不是分配内存,这一点需要强调。同时,当用户没有定义任何构造函数时,编译器会生成一个默认的无构造函数,但一旦用户定义了其他构造函数(比如有构造函数),编译器就不会再自动生成默认的无构造函数了,这时候如果需要无构造,必须显式定义。 接下来,我需要构造一个清晰的教程结构。首先定义无构造函数,然后说明它的调用场景,比如对象声明时不带数的情况。然后通过代码示例来演示如何定义使用无构造函数。同时,需要注意用户可能在声明对象时误用括号导致编译器误认为是函数声明的问题,比如Test2 obj();这样的写法可能会被当作函数声明而不是对象创建,这时候应该使用Test2 obj;来正确调用无构造函数。 此外,用户可能关心默认构造函数构造函数的关系。根据引用[2],默认构造函数指的是无需数就能调用的构造函数,包括无构造函数所有数都有默认值的有构造函数。但通常默认构造函数特指无的情况。这点需要分清楚,避免混淆。 还要注意,当类中存在其他构造函数时,如果用户没有显式定义无构造函数,编译器不会自动生成,这时候创建无对象会报错。需要提醒用户在这种情况下必须自己添加无构造函数,或者为有构造函数数提供默认值,使其成为默认构造函数。 最后,需要总结无构造函数的使用要点,并生成相关问题,帮助用户进一步学习。比如,如何区分默认构造函数构造函数,什么情况下必须显式定义无构造函数,以及如何避免对象声明时的语法错误等。 现在需要检查是否有遗漏点,比如拷贝构造函数构造函数的区别,但用户的问题集中在无构造函数上,所以可能不需要深入讨论拷贝构造,除非在示例中提到。另外,确保引用的内容被正确标注,比如引用[1]中的例子,引用[2]中关于编译器生成默认构造函数的说明,以及引用[3]中关于构造函数调用次数的问题,但用户的问题可能更关注定义使用,所以引用[3]的内容可能用不上,但可以作为相关问题提出。 总结步骤: 1. 定义无构造函数,语法格式。 2. 说明编译器自动生成的情况。 3. 示例代码演示定义调用。 4. 注意事项:显式定义的必要性,对象声明的正确语法。 5. 默认构造函数与无构造函数的关系。 6. 常见错误及解决方法。 7. 生成相关问题。</think>### C++构造函数定义与使用教程 --- #### 一、无构造函数的定义 无构造函数是**不需要任何数即可调用的构造函数**,其语法形式为: ```cpp 类名() { //初始化代码 } ``` 根据引用[2],若用户未定义任何构造函数,编译器会自动生成一个无的默认构造函数。但若已定义其他构造函数(如有构造函数),则**必须显式定义无构造函数**才能使用无方式创建对象。 --- #### 二、无构造函数实现 以引用[1]中的`Test2`类为例: ```cpp class Test2 { public: Test2() { //无构造函数 m_a = 0; m_b = 0; cout << "无构造函数" << endl; } //其他构造函数... }; ``` - **作用**:初始化成员变量`m_a``m_b`为0 - **调用时机**:通过`Test2 obj;`或`Test2* p = new Test2();`创建对象时 --- #### 三、无构造函数的调用方式 | 场景 | 正确写法 | 错误写法 | 解析 | |---------------------|--------------------|-------------------|----------------------------------------------------------------------| | 栈内存对象声明 | `Test2 obj;` | `Test2 obj();` | 括号会导致编译器误判为函数声明[^3] | | 堆内存对象创建 | `Test2* p = new Test2;` | `Test2* p = new Test2();` | 两种写法等效,但推荐前者 | --- #### 四、核心注意事项 1. **显式定义的必要性** 当类中存在其他构造函数时,必须显式定义无构造函数: ```cpp class MyClass { public: MyClass(int x) {} //定义了有构造函数 MyClass() {} //必须显式定义无构造函数 }; ``` 2. **默认构造函数与无构造函数的关系** - 默认构造函数包括: - 无构造函数 - **所有数都有默认值**的构造函数(如`Test2(int a=0, int b=0)`) - 引用[2]指出:若用户未定义构造函数,编译器生成的默认构造函数属于无类型 3. **成员初始化建议** 推荐使用初始化列表: ```cpp Test2() : m_a(0), m_b(0) { cout << "无构造函数" << endl; } ``` --- #### 五、完整使用示例 ```cpp #include <iostream> using namespace std; class Student { public: Student() : id(0), name("匿名") { cout << "无构造函数被调用" << endl; } void display() { cout << "学号:" << id << " 姓名:" << name << endl; } private: int id; string name; }; int main() { Student s1; //正确调用无构造 Student* s2 = new Student; //堆内存对象 s1.display(); //输出:学号:0 姓名:匿名 delete s2; return 0; } ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值