Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
data8-textbook-zh
提交
c707ce46
D
data8-textbook-zh
项目概览
OpenDocCN
/
data8-textbook-zh
9 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
data8-textbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c707ce46
编写于
11月 12, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch4
上级
bfaf1a75
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
199 addition
and
0 deletion
+199
-0
4.md
4.md
+199
-0
未找到文件。
4.md
浏览文件 @
c707ce46
# 四、数据类型
> 原文:[Data Types](https://github.com/data-8/textbook/tree/gh-pages/chapters/04)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
每个值都有一个类型,内建的
`type`
函数返回任何表达式的结果的类型:
```
py
...
...
@@ -162,3 +170,194 @@ sum(highs)/len(highs)
日高温的均值
## 数组
Python 中有很多种类的集合,我们在这门课中主要使用数组。 我们已经看到,
`make_array`
函数可以用来创建数值的数组。
数组也可以包含字符串或其他类型的值,但是单个数组只能包含单一类型的数据。 (无论如何,把不相似的数据组合在一起,通常都没有意义)。例如:
```
py
english_parts_of_speech
=
make_array
(
"noun"
,
"pronoun"
,
"verb"
,
"adverb"
,
"adjective"
,
"conjunction"
,
"preposition"
,
"interjection"
)
english_parts_of_speech
array
([
'noun'
,
'pronoun'
,
'verb'
,
'adverb'
,
'adjective'
,
'conjunction'
,
'preposition'
,
'interjection'
],
dtype
=
'<U12'
)
```
> 译者注:
> ```py
> import numpy as np
> make_array = lambda *args: np.asarray(args)
> ```
返回到温度数据,我们创建 1850 年,1900 年,1950 年和 2000 年的几十年间,
[
日平均高温
](
http://berkeleyearth.lbl.gov/auto/Regional/TMAX/Text/global-land-TMAX-Trend.txt
)
的数组。
```
py
baseline_high
=
14.48
highs
=
make_array
(
baseline_high
-
0.880
,
baseline_high
-
0.093
,
baseline_high
+
0.105
,
baseline_high
+
0.684
)
highs
array
([
13.6
,
14.387
,
14.585
,
15.164
])
```
数组可以用在算术表达式中来计算其内容。 当数组与单个数组合时,该数与数组的每个元素组合。 因此,我们可以通过编写熟悉的转换公式,将所有这些温度转换成华氏温度。
```
py
(
9
/
5
)
*
highs
+
32
array
([
56.48
,
57.8966
,
58.253
,
59.2952
])
```
数组也有方法,这些方法是操作数组值的函数。 数值集合的均值是其总和除以长度。 以下示例中的每对括号都是调用表达式的一部分;它调用一个无参函数来对数组
`highs`
进行计算。
```
py
highs
.
size
4
highs
.
sum
()
57.736000000000004
highs
.
mean
()
14.434000000000001
```
### 数组上的函数
`numpy`
包,在程序中缩写为
`np`
,为 Python 程序员提供了创建和操作数组的,方便而强大的函数。
```
py
import
numpy
as
np
```
例如,
`diff`
函数计算数组中每两个相邻元素之间的差。 差数组的第一个元素是原数组的第二个元素减去第一个元素。
```
py
np
.
diff
(
highs
)
array
([
0.787
,
0.198
,
0.579
])
```
[
完整的 Numpy 参考
](
http://docs.scipy.org/doc/numpy/reference/
)
详细列出了这些功能,但一个小的子集通常用于数据处理应用。 它们分组到了
`np`
中不同的包中。 学习这些词汇是学习 Python 语言的重要组成部分,因此在您处理示例和问题时,请经常回顾这个列表。
但是,你不需要记住这些,只需要将它用作参考。
每个这些函数接受数组作为参数,并返回单个值。
| 函数 | 描述 |
| --- | --- |
|
`np.prod`
| 将所有元素相乘 |
|
`np.sum`
| 将所有元素相加 |
|
`np.all`
| 测试是否所有元素是真值 (非零数值是真值) |
|
`np.any`
| 测试是否任意元素是真值(非零数值是真值) |
|
`np.count_nonzero`
| 计算非零元素的数量 |
每个这些函数接受字符串数组作为参数,并返回数组。
| 函数 | 描述 |
| --- | --- |
|
`np.char.lower`
| 将每个元素变成小写 |
|
`np.char.upper`
| 将每个元素变成大写 |
|
`np.char.strip`
| 移除每个元素开头或末尾的空格 |
|
`np.char.isalpha`
| 每个元素是否只含有字母(没有数字或者符号) |
|
`np.char.isnumeric`
| 每个元素是否只含有数字(没有字母) |
每个这些函数接受字符串数组和一个搜索字符串。
| 函数 | 描述 |
| --- | --- |
| np.char.count | 在数组的元素中,计算搜索字符串的出现次数 |
| np.char.find | 在每个元素中,搜索字符串的首次出现位置 |
| np.char.rfind | 在每个元素中,搜索字符串的最后一次出现位置 |
| np.char.startswith | 每个字符串是否以搜索字符串起始 |
## 范围
范围是一个数组,按照递增或递减的顺序排列,每个元素按照一定的间隔分开。 范围在很多情况下非常有用,所以值得了解它们。
范围使用
`np.arange`
函数来定义,该函数接受一个,两个或三个参数:起始值,终止值和“步长”。
如果将一个参数传递给
`np.arange`
,那么它将成为终止值,其中
`start = 0`
,
`step = 1`
。 两个参数提供了起始值和终止值,
`step = 1`
。 三个参数明确地提供了起始值,终止值和步长。
范围始终包含其
`start`
值,但不包括其
`end`
值。 它按照
`step`
计数,并在到达
`end`
之前停止。
```
py
np
.
arange
(
end
):
An
array
starting
with
0
of
increasing
consecutive
integers
,
stopping
before
end
.
np
.
arange
(
5
)
array
([
0
,
1
,
2
,
3
,
4
])
```
要注意,数值从
`0`
起始,并仅仅增加到
`4`
,并不是
`5`
。
```
py
np
.
arange
(
start
,
end
):
An
array
of
consecutive
increasing
integers
from
start
,
stopping
before
end
.
np
.
arange
(
3
,
9
)
array
([
3
,
4
,
5
,
6
,
7
,
8
])
np
.
arange
(
start
,
end
,
step
):
A
range
with
a
difference
of
step
between
each
pair
of
consecutive
values
,
starting
from
start
and
stopping
before
end
.
np
.
arange
(
3
,
30
,
5
)
array
([
3
,
8
,
13
,
18
,
23
,
28
])
```
这个数组从
`3`
起始,增加了步长
`5`
变成
`8`
,然后增加步长
`5`
变成
`13`
,以此类推。
当你指定步长时,起始值、终止值和步长可正可负,可以是整数也可以是分数。
```
py
np
.
arange
(
1.5
,
-
2
,
-
0.5
)
array
([
1.5
,
1.
,
0.5
,
0.
,
-
0.5
,
-
1.
,
-
1.5
])
```
### 示例:莱布尼茨的 π 公式
伟大的德国数学家和哲学家戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz,1646 ~ 1716年)发现了一个简单分数的无穷和。 公式是:
![](
https://www.zhihu.com/equation?tex=%5Cpi%20%3D%204%20%5Ccdot%20%5Cleft(1%20-%20%5Cfrac%7B1%7D%7B3%7D%20%2B%20%5Cfrac%7B1%7D%7B5%7D%20-%20%5Cfrac%7B1%7D%7B7%7D%20%2B%20%5Cfrac%7B1%7D%7B9%7D%20-%20%5Cfrac%7B1%7D%7B11%7D%20%2B%20%5Cdots%5Cright
)
)
虽然需要一些数学来确定它,但我们可以用数组来说服我们自己,公式是有效的。 让我们计算莱布尼茨的无穷和的前 5000 个项,看它是否接近 π。
![](
https://www.zhihu.com/equation?tex=4%20%5Ccdot%20%5Cleft(1%20-%20%5Cfrac%7B1%7D%7B3%7D%20%2B%20%5Cfrac%7B1%7D%7B5%7D%20-%20%5Cfrac%7B1%7D%7B7%7D%20%2B%20%5Cfrac%7B1%7D%7B9%7D%20-%20%5Cfrac%7B1%7D%7B11%7D%20%2B%20%5Cdots%20-%20%5Cfrac%7B1%7D%7B9999%7D%20%5Cright
)
)
我们将计算这个有限的总和,首先加上所有的正项,然后减去所有负项的和 [1]:
![](
https://www.zhihu.com/equation?tex=4%20%5Ccdot%20%5Cleft(%20%5Cleft(1%20%2B%20%5Cfrac%7B1%7D%7B5%7D%20%2B%20%5Cfrac%7B1%7D%7B9%7D%20%2B%20%5Cdots%20%2B%20%5Cfrac%7B1%7D%7B9997%7D%20%5Cright
)
%20-%20%5Cleft(%5Cfrac%7B1%7D%7B3%7D%20%2B%20%5Cfrac%7B1%7D%7B7%7D%20%2B%20%5Cfrac%7B1%7D%7B11%7D%20%2B%20%5Cdots%20%2B%20%5Cfrac%7B1%7D%7B9999%7D%20%5Cright)%20%5Cright))
> [1] 令人惊讶的是,当我们将无限多个分数相加时,顺序可能很重要。但是我们对 π 的近似只使用了大量的数量有限的分数,所以可以按照任何方便的顺序,将这些项相加。
和中的正项的分母是
`1, 5, 9`
,以此类推。数组
`by_four_to_20`
包含
`17`
之前的这些数。
```
py
by_four_to_20
=
np
.
arange
(
1
,
20
,
4
)
by_four_to_20
array
([
1
,
5
,
9
,
13
,
17
])
```
为了获得 π 的准确近似,我们使用更长的数组
`positive_term_denominators`
。
```
py
positive_term_denominators
=
np
.
arange
(
1
,
10000
,
4
)
positive_term_denominators
array
([
1
,
5
,
9
,
...,
9989
,
9993
,
9997
])
```
我们实际打算加起来的正项,就是一除以这些分母。
```
py
positive_terms
=
1
/
positive_term_denominators
```
负向的分母是
`3, 7, 11`
,以此类推。这个数组就是
`positive_term_denominators`
加二。
```
py
negative_terms
=
1
/
(
positive_term_denominators
+
2
)
```
整体的和是:
```
py
4
*
(
sum
(
positive_terms
)
-
sum
(
negative_terms
)
)
3.1413926535917955
```
这非常接近于
`π = 3.14159...`
。莱布尼茨公式看起来不错。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录