Scipy & Numpy 操作多维数组

2016-03-02 18:48:46 +08:00
 bboyliu

Arrays 是 Scipy 的 核心数据类型( Numpy 是 Scipy 的子集, 可以以同样的方式来访问数组对象。所以,这里将一致使用 Scipy 来介绍如何操作 数组对象)。严格来讲,数组对象的类型是 ndarray , 即 n-dimentional array 。通过 引入 scipy 模块,便可操作访问 数组对象。数组对象 类似与 Python Lists , 不同的是,数组对象是多维的数组,支持简洁有效的数组级别的操作。

数据结构图

引入 Scipy 模块

>>> import scipy

构建数组

数组索引

数组切片

```
>>> a = scipy.random.randint(1, 10, (5, 5))
array([[2, 9, 2, 6, 4],
       [3, 4, 3, 7, 5],
       [8, 6, 4, 1, 3],
       [5, 9, 2, 3, 5],
       [7, 9, 4, 2, 7]])

>>> a[1:3, 2:4]
array([[3, 7],
      [4, 1]])

>>> a[:3, 2:]
array([[2, 6, 4],
       [3, 7, 5],
       [4, 1, 3]])
```

加减乘除

>>> a = scipy.ones((3, 3), int)
>>> b = 2 * scipy.ones((3, 3), int)
>>> a + b
array([[3, 3, 3],
       [3, 3, 3],
       [3, 3, 3]])

>>> a * b
array([[2, 2, 2],
       [2, 2, 2],
       [2, 2, 2]])

>>> c = scipy.random.randint(1, 10, (3, 3))
array([[3, 6, 4],
       [6, 2, 8],
       [2, 1, 9]])
>>> b * c
array([[ 4,  4,  2],
       [18, 14,  6],
       [16,  6,  2]])

数组 三角函数 处理

>>> a = scipy.ones((3, 3))
>>> scipy.sin(a)
array([[ 0.84147098,  0.84147098,  0.84147098],
       [ 0.84147098,  0.84147098,  0.84147098],
       [ 0.84147098,  0.84147098,  0.84147098]])

>>> scipy.cos(a)
array([[ 0.54030231,  0.54030231,  0.54030231],
       [ 0.54030231,  0.54030231,  0.54030231],
       [ 0.54030231,  0.54030231,  0.54030231]])

数组求和

其他有用的方法,请查看 Numpy Example

翻译自refer article

3392 次点击
所在节点    Python
4 条回复
knightdf
2016-03-02 19:37:48 +08:00
b = scipy.array([i * i for i in range(10) if i % 2 == 1]) # 构建 1 * 10
bboyliu
2016-03-02 20:55:36 +08:00
@knightdf 第一次在 V2EX 上发文章,不能修改,另外,文章还有很多地方排版都不好,没办法修改了。*** 依旧谢谢你的指正 ***!!!

针对你发的代码,正确的描述为:

```
# 构建 1 * 5 的数组,且每项为 10 以内 被 2 除 模为 1 的数的平方。
b = scipy.array([i * i for i in range(10) if i % 2 == 1])
```
knightdf
2016-03-02 21:00:51 +08:00
@bboyliu 其实还有。。
>> scipy.sum(a, 0) # 按照 axis = 0 (参考数据结构图) 的 求和
array([19, 9, 21])
这个 19 是怎么来的。。。。
Kilerd
2016-03-02 22:08:02 +08:00
没有养成发文章之前先预览的好习惯(并不是特指在 V2 )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260591

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX