ndarray:一种多维数组对象
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:一种多维数组对象的更多相关文章
- Numpy的ndarry:一种多维数组对象
Numpy的ndarry:一种多维数组对象 Numpy最重要的一个特点就是其N维数组对象(即ndarry),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟 ...
- jquery解析php通过ajax传过来的json二维数组对象
ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>arra ...
- 初识numpy的多维数组对象ndarray
PS:内容来源于<利用Python进行数据分析> 一.创建ndarray 1.array :将一个序列(嵌套序列)转换为一个数组(多维数组) In[2]: import numpy as ...
- Numpy 多维数组简介
 NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...
- numpy 数组对象
numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange ...
- Numpy学习一:ndarray数组对象
NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray.jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift ...
- NumPy之:ndarray多维数组操作
NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...
- 一、Numpy库与多维数组
# Author:Zhang Yuan import numpy as np '''重点摘录: 轴的索引axis=i可以理解成是根据[]层数来判断的,0表示[],1表示[[]]... Numpy广播的 ...
- flash 定义二维数组
一种二维数组的定义方法 //假设二维数组为 [5][7]var xn:Number = 5;var yn:Number = 7; //定义一数值变量var temp:Number = 0; ...
随机推荐
- 集成iAd广告
在iPhone程序中集成广告,管他能不能赚钱,不放上一个iAd就心有不甘. 参考了下面这篇文章: http://bees4honey.com/blog/tutorial/how-to-add-iad- ...
- 什么是Java内存模型中的happens-before
Java内存模型JMM Java内存模型(即Java Memory Model , 简称JMM),本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序个各个变量(包括实 ...
- EXTJS中文乱码
在<head>中加入 <meta http-equiv="Content-Type" content="text/html; charset=GB231 ...
- ES6变量解构赋值的用法
一.数组赋值(从数组中提取值,按照对应位置,对变量赋值) 1. 完全解构(变量与值数目相等) let arr = [1, 2, 3]; let [a,b,c] = arr; console.log(a ...
- bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版
题目描述: bzoj3545,luogu bzoj3551 题解: 重构树+线段树合并. 可以算是板子了吧. 代码(非强制在线): #include<cstdio> #include< ...
- mysql随机获取数据
SELECT * FROM `table` AS t1 JOIN ( SELECT ROUND( RAND() * ( (SELECT MAX(id) FROM `table`) - (SELECT ...
- ASP.NET MVC中如何在当前页面上弹出另外一个页面
注意:不是链接到另一个页面,而是弹出一个页面,当前的页面和弹出页面都存在于浏览器的同一个标签页中,效果如图: 弹出的窗体置于四大天王页面之上,但是无法继续操作底层的页面,代码如下: function ...
- ZOJ 3469 区间DP Food Delivery
题解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...
- magic mouse 2 在Mac上灵敏度太低的解决办法
1.打开终端 2.输入以下代码查看当前鼠标移动速度 defaults read -g com.apple.mouse.scaling 你会看到输出的是 “3”,这是初始速度 3.输入以下代码改变鼠标移 ...
- Exchange 邮件服务器内存硬盘估算