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. HDU 4291 A Short problem 短问题 (递推,找规律)

    题意: 给出递推式 g(n) = 3g(n - 1) + g(n - 2),且g(1) = 1,g(0) = 0.求g( g( g(n))) mod 109 + 7. 思路: 要求的g( g( g(n ...

  2. css3 省略号

    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 也无需给元素设置固定宽度!

  3. SAP不同的产品是如何支持用户创建自定义字段的

    我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看. SAP CRM 我们使用所谓的Application Enhancement Tool( ...

  4. UVA - 1658 Admiral (最小费用最大流)

    最短路对应费用,路径数量对应流量.为限制点经过次数,拆点为边.跑一次流量为2的最小费用最大流. 最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路. #include ...

  5. Heacher互助平台 α版本冲刺

    课程属性 作业课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 作业链接 https://edu.cnblogs.co ...

  6. shell 复合条件测试 if [ $1 == "1" -o $1 == "0" ] ------==和-eq怎么用

    想要实现: ”,或者$1等于“” ];then 输出一些东西 ”,或者$1等于“” ];then 输出一些东西 fi 这里比较难操作的是等于和或者: 等于: -eq  或者 == 或者: -o 见: ...

  7. 【转】数据库SQL的一些总结

    http://www.cnblogs.com/yank/category/104903.html

  8. 阿里短信接口使用(JAVA版)

    近期项目需要使用短信接口,对比下选择了阿里的短信接口 以下为开发笔记: maven pom.xml中引入: <dependency> <groupId>com.aliyun&l ...

  9. shell脚本,配置文件加载顺序,以及什么时候加载。

    在linux系统中,有/etc/profile,/etc/bashrc ,~/.bash_profile,~/bashrc这四个配置文件,这些文件,会自动的在某些时候加载,也就是点一下,一般都是些别名 ...

  10. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...