ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)。

In []: import numpy as np

In []: data = np.array([[,,,],[,,,]])

In []: data
Out[]:
array([[, , , ],
[, , , ]])
In []: data.shape
Out[]: (, ) In []: data.dtype
Out[]: dtype('int32')

Part 1 :创建ndarray的方法

  array()

  arange()

  linspace()

  zeros()

  ones()

  empty()

  eye()

一 array()

  类似Python中的列表,但有两点不同。

    array长度是预先定好的,没有append方法。

    执行乘法操作时。示例。

import numpy as np

a=np.array([,,,,])
print('numpy',a*) l=[,,,,]
print('python',l*)

  输出:  

numpy [     ]
python [, , , , , , , , , , , , , , , , , , , , , , , , ]

  应用场景 1)

    假如有这样一个场景,将[1,2,3,4,5,6,7] 美元货币转为人民币,这个时候,numy.array便能较好的实现效果。

  python能不能实现呢?也是可以的。两种方法,一种方法是循环遍历,乘以汇率。另外一种是使用内置函数map函数。有逼格。

  注意,python3中,map返回的是迭代器。

import numpy as np

a=np.array([,,,,])
print('numpy',a*) l=[,,,,]
print('python',l*)
print('map函数',list(map(lambda x:x*,l)))

  应用场景 2)

    有1000个商品,每个商品数量随机,商品价格随机,求总金额。 array实现起来也比较简单。

    最后调用 .sum()方法

import numpy as np
import random
p=np.array([random.uniform(,) for _ in range()])
n=np.array([random.randint(,) for _ in range()])
print((p*n).sum()) #.sum()

  同样,用python能不能实现呢?也是可以的,有两种方法。一种方法是for循环,一种方法是使用内置函数zip函数。很有逼格,老铁。

  方法1:

s=
p=[random.uniform(,) for _ in range()]
n=[random.randint(,) for _ in range()]
for i in range():
s+=p[i]*n[i]
print(s)

  方法2 :zip方法。注意,zip函数返回来的是一个迭代器。zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

p=[random.uniform(,) for _ in range()]
n=[random.randint(,) for _ in range()]
s=
for price,num in zip(p,n):
s+=price*num
print(s)

二 linspace(x,y,n)

  将x-y,之间 n 均等分

  类似arange(),第三个参数为数组长度。

x=np.linspace(-,,)
x

  输出:

array([-.      ,  -99.979998,  -99.959996, ...,   99.959996,
99.979998, . ])

  利用linspace画图

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-,,)
y=x**
plt.plot(x,y)
plt.show()

  输出:

  

三  arange()

  基本和range方法一样用

  不同点,步长支持浮点数。

arr=np.arange(,,0.5)
arr

  输出:

array([ . ,  1.5,  . ,  2.5,  . ,  3.5,  . ,  4.5,  . ,  5.5,  . ,
6.5, . , 7.5, . , 8.5, . , 9.5, . , 10.5, . , 11.5,
. , 12.5, . , 13.5, . , 14.5, . , 15.5, . , 16.5, . ,
17.5, . , 18.5, . , 19.5])

四 zeros()

  根据指定形状和dtype,创建全0数组

arr=np.zeros()
arr

  输出: 默认是浮点型

array([., ., ., ., ., ., ., ., ., .])

  

  可以指定类型,参数是dtype

arr=np.zeros(,dtype='int')
arr

  输出:

array([, , , , , , , , , ])

  

  可以创建二维数组

arr=np.zeros((,),dtype='int')
arr

  输出:

array([[, , , ],
[, , , ],
[, , , ]])

五 ones()

  和zeros 类似,根据指定形状和dtype,创建全1 数组,可以创建二维数组。

六 empty()

  根据指定形状和dtype,创建空数组(随机数填充),可以创建二维数组。

arr=np.empty()
arr

  输出:

array([7.33501733e-312, 0.00000000e+000, 3.60739284e-313, 4.94065646e-324,
7.33501739e-312, 7.33501604e-312, 7.33371324e-312, 5.30498948e-313,
0.00000000e+000, 0.00000000e+000, 7.33501604e-312, 0.00000000e+000,
5.72938864e-313, 4.94065646e-324, 7.33501739e-312, 7.33501604e-312,
7.33371324e-312, 7.42698527e-313, 0.00000000e+000, 0.00000000e+000,
1.50690022e-321, 0.00000000e+000, 7.85138443e-313, 4.94065646e-324,
7.33501740e-312, 5.92878775e-323, 7.33371322e-312, 9.54898106e-313,
0.00000000e+000, 0.00000000e+000, 1.50690022e-321, 0.00000000e+000,
9.97338022e-313, 4.94065646e-324, 7.33501740e-312, 5.92878775e-323,
7.33371324e-312, 1.16709769e-312, 0.00000000e+000, 0.00000000e+000,
7.33499531e-312, 0.00000000e+000, 1.20953760e-312, 4.94065646e-324,
7.33501741e-312, 7.33499531e-312, 7.33371324e-312, 1.37929726e-312,
0.00000000e+000, 0.00000000e+000, 7.33499531e-312, 0.00000000e+000,
1.42173718e-312, 4.94065646e-324, 7.33501741e-312, 7.33499531e-312,
7.33371324e-312, 1.59149684e-312, 0.00000000e+000, 0.00000000e+000,
3.18994064e+231, 0.00000000e+000, 1.63393676e-312, 5.87880625e+250,
7.33501741e-312, 1.77111852e+159, 7.33371323e-312, 1.80369642e-312,
8.97461399e+245, 0.00000000e+000, 5.77253125e+250, 0.00000000e+000,
1.84613634e-312, 1.62482249e+265, 7.33501741e-312, 1.42973900e+188,
7.33371324e-312, 2.01589600e-312, 1.72351640e+212, 0.00000000e+000,
1.72762649e+212, 0.00000000e+000, 2.05833592e-312, 3.33203517e+178,
7.33501742e-312, 7.09013607e+274, 7.33371324e-312, 2.22809558e-312,
4.13443852e-087, 0.00000000e+000, 1.53172818e-154, 0.00000000e+000,
2.27053550e-312, 4.85705098e+226, 7.33501742e-312, 5.84384734e+250,
1.52845066e-154, 5.88999540e+250, 7.42539480e+221, 7.70887102e-315])

七 eye()

  根据指定边长和dtype创建单位矩阵。

arr=np.eye()
arr

  输出:

array([[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .]])

Part 2 :ndarray的数据类型

  dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。

In []: arr1 = np.array([,,],dtype=np.float64)

In []: arr2 = np.array([,,],dtype=np.int32)

In []: arr1.dtype
Out[]: dtype('float64') In []: arr2.dtype
Out[]: dtype('int32')

  dtype是numpy如此强大和灵活的原因之一。多数情况下,他们直接映射到相应的机器表示,这使得‘读写磁盘上的二进制数据流’以及‘集成低级语言代码(如C,Fortran)’等工作边的更加简单。

  

  你可以通过ndarray的astype方法显示的转换换其dtype

In []: arr = np.array([,,,])

In []: arr
Out[]: array([, , , ]) In []: arr.dtype
Out[]: dtype('int32') In []: arr1 = arr.astype(np.float64) In []: arr1.dtype
Out[]: dtype('float64')

  注意:调用astype无论如何都会创造出一个新的 数组(原始数组的一份拷贝),即使新dtype跟苑dtype相同也是如此。

Part 3 :基本的索引和切片

In []: arr = np.arange()

In []: arr
Out[]: array([, , , , , , , , , ]) In []: arr[]
Out[]: In []: arr[:]
Out[]: array([, , ]) In []: s = arr[:]
In []: s
Out[]: array([, , ]) In []: s[] = In []: s
Out[]: array([ , , ]) In []: arr
Out[]:
array([ , , , , , , , , ,
])

  跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反应到原数组上。因为numpy的设计目的是处理大数据。

  如果你想要得到一份副本而非视图。就需要显式的进行复制操作。

In []: arr = np.arange()

In []: arr
Out[]: array([, , , , , , , , , ]) In []: s = arr[:].copy() In []: s
Out[]: array([, , ]) In []: s[] = In []: s
Out[]: array([ , , ]) In []: arr
Out[]: array([, , , , , , , , , ])

补充

  1 一维数组 转换 二维数组.。reshape方法

arr=np.array([,,,,,,,,,]).reshape((,))
arr

  输出:

array([[ ,  ,  ,  ,  ],
[ , , , , ]])

  2  int类型数组 与 浮点型 数组之间的转换 。astype方法

arr=np.arange(,dtype='int')
arr

  输出: 这是整型

array([, , , , , , , , , ])

  

  直接调用astype()

arr.astype('float')

  输出:

array([., ., ., ., ., ., ., ., ., .])

  

  3 索引

    1 一维数组 arr[3]

    2 二维数组

      arr[3][3]  

      arr[3,3]  推荐这个方法。与下面切片联系紧密。

  4 切片

array([[ ,  ,  ,  ,  ],
[ , , , , ],
[, , , , ]])

  想取出下面数组,怎么办?

array([[ ,  ],
[, ]])

  用推荐的索引稍加变动。

arr[:,:]

   5 和列表不同的,数组的切片不是自动复制,对切片数组的修改会影响到原切片。

  

  怎么办呢,加copy()方法

  

ndarray:一种多维数组对象的更多相关文章

  1. Numpy的ndarry:一种多维数组对象

    Numpy的ndarry:一种多维数组对象 Numpy最重要的一个特点就是其N维数组对象(即ndarry),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟 ...

  2. jquery解析php通过ajax传过来的json二维数组对象

    ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>arra ...

  3. 初识numpy的多维数组对象ndarray

    PS:内容来源于<利用Python进行数据分析> 一.创建ndarray 1.array :将一个序列(嵌套序列)转换为一个数组(多维数组) In[2]: import numpy as ...

  4. Numpy 多维数组简介

     NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...

  5. numpy 数组对象

    numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange ...

  6. Numpy学习一:ndarray数组对象

    NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray.jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift ...

  7. NumPy之:ndarray多维数组操作

    NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...

  8. 一、Numpy库与多维数组

    # Author:Zhang Yuan import numpy as np '''重点摘录: 轴的索引axis=i可以理解成是根据[]层数来判断的,0表示[],1表示[[]]... Numpy广播的 ...

  9. flash 定义二维数组

    一种二维数组的定义方法   //假设二维数组为 [5][7]var  xn:Number = 5;var  yn:Number = 7; //定义一数值变量var  temp:Number = 0; ...

随机推荐

  1. 使用JOSM编辑OpenStreetMap地图

    申明:转载请注明出处! 网上关于JOSM的使用大多只介绍了如何安装和优缺点,对于我这种小白完全还是不会,于是Google了一番,国外关于JOSM的使用的文章还是很多的, 选中一篇讲解的非常详细来翻译, ...

  2. 更新Svn客户端后,右键菜单中没有TortoiseSVN

    环境: OS:                 Windows XP sp3 升级后SVNServer:    VisualSVN Server 2.7.3 升级后SVNClient:    小乌龟: ...

  3. Codeforces Round #317 div2 E div1 C CNF 2 (图论,匹配)

      CNF 2 'In Boolean logic, a formula is in conjunctive normal form (CNF) or clausal normal form if i ...

  4. SQL——SQL语言全部关键字详解

    http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...

  5. 原生js格式化json的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. glob - 形成路径名称

    描述 (DESCRIPTION) 很久以前 在 UNIX V6 版 中 有一个 程序 /etc/glob 用来 展开 通配符模板. 不久以后 它 成为 shell 内建功能. 现在 人们 开发了 类似 ...

  7. PJSIP-iOS源码编译

    官方文档https://trac.pjsip.org/repos/wiki/Getting-Started/iPhone 功能 在iPhone上可以实现的功能: 包含基于CoreAudio的音频设备, ...

  8. vue计算属性无法监听到数组内部变化

    计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data. 首先看一下计算属性的基本写法(摘自官网) var vm = new Vue({ el: '#demo', d ...

  9. selenium-浏览器操作方法

    前戏 浏览器都有哪些方法呢?最大化,设置浏览器窗口的大小,刷新,前进,后退等等,让我们来一一介绍 获取网站titie from selenium import webdriver from time ...

  10. Bootstrap历练实例:危险样式按钮

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...