问题:

  为什么第一次输出矩阵形式的数据,第二次输出list形式的数据?

详见代码:

a = np.array([[1, 2], [3, 4]])
print(a)
print('ndim :', a.ndim)

控制台输出:

[[1 2]
[3 4]]
ndim : 2

然而,代码修改一下:

b = np.array([[11, 12], [14, 16, 17]])
print(b)
print(type(b))

控制台输出:

[list([11, 12]) list([14, 16, 17])]
<class 'numpy.ndarray'>

答案:

  第二次输出元素 [ [11, 12], [14, 16, 17] ] 在形式上不能用矩阵形式输出,不对称。


问题:

array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
order : {'K', 'A', 'C', 'F'}, optional
Specify the memory layout of the array. order参数用于:指定数组的内存布局。

  order的作用体现在哪里?

  怎么才能看出数组的内存布局?

答案:

  ndarray.flags属性, 查看ndarray对象的内存信息

  C_CONTIGUOUS : True        c_contiguous(连续的)
F_CONTIGUOUS : False        f_contiguous
OWNDATA : True           own data
WRITEABLE : True          writeable
ALIGNED : True           aligned(对齐)
WRITEBACKIFCOPY : False     write back if copy
UPDATEIFCOPY : False       update if copy

sin():

Parameters
----------
x : array_like
Angle, in radians (:math:`2 \pi` rad equals 360 degrees).

2 \pi = 2π

360°等于2π弧度
在数学和物理中,弧度是角的量度单位.它是由国际单位制导出的单位,单位缩写是rad.(radians)

弧度定义:弧长等于圆半径的弧所对的圆心角为1弧度

根据定义,一周的弧度数为2πr/r=2π, 360°角=2π弧度,因此,1弧度约为57.3°,即57°17'44.806'',1°为π/180弧度,近似值为0.01745弧度,周角为2π弧度, 平角(即180°角)为π弧度, 直角为π/2弧度.
在具体计算中,角度以弧度给出时,通常不写弧度单位,直接写值.最典型的例子是三角函数,如sin 8π、tan (3π/2).
弧长公式:
l rad=nπr/180
在这里,n就是角度数.


np.repeat()使用技巧

c = np.array([[1, 2, 3]])
c = c.reshape(-1, 3).repeat(2, 0)
输出c:
[[1, 2, 3],
[1, 2, 3]]
=====================
cc = c.reshape(-1, 3)
# -1代表不管行数,只是确定列数为3 # repeat用法
d = c.reshape(-1, 3)
d.repeat(2, 0) 可以
d.repeat(preats=2, axis=0) 可以
np.repeat(d, 2, 0) 也可以

问题:

  同样是order排序,传入'C','F'不同,则打印不同?

代码:

import numpy as np
a = np.arange(0, 60, 5).reshape((3, 4))
print(a)
for x in np.nditer(a,flags=['external_loop'], order='C'):
print(x, end=', ')

控制台输出:

[[ 0  5 10 15]
[20 25 30 35]
[40 45 50 55]]
[ 0 5 10 15 20 25 30 35 40 45 50 55],

然而,代码:

import numpy as np
a = np.arange(0, 60, 5).reshape((3, 4))
print(a)
for x in np.nditer(a,flags=['external_loop'], order='F'):
print(x, end=', ')

控制台输出:

[[ 0  5 10 15]
[20 25 30 35]
[40 45 50 55]]
[ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],

答案:

  迭代器遍历对应于每列,并组合为一维数组。(默认)


问题:

  a.T在nditer中迭代不应该输出

[[0 3]
[1 4]
[2 5]]

  吗?

代码:

a = np.arange(6).reshape(2, 3)
print(a)
print(a.T)
print(a.T.flags)
for x in np.nditer(a.T):
print(x, end=', ')
print('\n')

控制台输出:

[[0 1 2]
[3 4 5]] [[0 3]
[1 4]
[2 5]] C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False 0, 1, 2, 3, 4, 5,

答案:

  np.nditer(..., order='K') :

    order参数默认‘K’

  源码中,as close sth. as possible : 尽可能靠近

'K' means as close to the order the array elements appear in memory as possible.

  翻译:'K' 意味着,(顺序要)尽可能靠近内存中出现的的数组的元素顺序。   


=============================================

NumPy的思考……的更多相关文章

  1. numpy库:常用基本

    numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...

  2. numpy.trace对于三维以上array的解析

    numpy.trace是求shape的对角线上的元素的和,具体看 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.t ...

  3. [转]numpy 100道练习题

    100 numpy exercise 翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源:https://github.com/rougier/numpy-100 Nu ...

  4. Python笔记 #06# NumPy Basis & Subsetting NumPy Arrays

    原始的 Python list 虽然很好用,但是不具备能够“整体”进行数学运算的性质,并且速度也不够快(按照视频上的说法),而 Numpy.array 恰好可以弥补这些缺陷. 初步应用就是“整体数学运 ...

  5. 【CV知识学习】神经网络梯度与归一化问题总结+highway network、ResNet的思考

    这是一篇水货写的笔记,希望路过的大牛可以指出其中的错误,带蒟蒻飞啊~ 一.    梯度消失/梯度爆炸的问题 首先来说说梯度消失问题产生的原因吧,虽然是已经被各大牛说烂的东西.不如先看一个简单的网络结构 ...

  6. NNs(Neural Networks,神经网络)和Polynomial Regression(多项式回归)等价性之思考,以及深度模型可解释性原理研究与案例

    1. Main Point 0x1:行文框架 第二章:我们会分别介绍NNs神经网络和PR多项式回归各自的定义和应用场景. 第三章:讨论NNs和PR在数学公式上的等价性,NNs和PR是两个等价的理论方法 ...

  7. NN入门,手把手教你用Numpy手撕NN(2)

    这是一篇包含较少数学推导的NN入门文章 上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善. 误差反向传播 之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算 ...

  8. 使用NumPy、Numba的简单使用(二)

    本来要写NLP第三课动态规划的,日了,写到一半发现自己也不会了,理论很简单,动态规划咋回事也知道,但是实现在源码上还是有点难度,现在简单给予题目描述,小伙伴也可以来思考一下,例题一,我们现在有1元硬币 ...

  9. 从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考

    1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关 ...

随机推荐

  1. FWT快速沃尔什变换学习笔记

    FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...

  2. 深入理解JVM(3)——类加载机制

    1.类加载时机 类的整个生命周期包括了:加载( Loading ).验证( Verification ).准备( Preparation ).解析( Resolution ).初始化( Initial ...

  3. vm Linux centos 链接外网

    修改network配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改ONBOOT=yes 重启服务 service network restart ...

  4. tty

    tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适. 终端 ...

  5. prometheus 配置容器 cadvisor监控节点

    安装cadvisor docker run \ --volume=/:/roofs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro ...

  6. Java多线程:向线程传递参数的三种方法

    在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程 ...

  7. 【转】Reflector、reflexil、De4Dot、IL相关操作指令合集

    PS:CTRL+F 输入你需要的内容,可以快速查找页面上的内容. 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. ...

  8. 常见RPC开源框架

    什么是rpc框架先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用?通常我们调用一个php中的方法,比如这样 ...

  9. 【ShaderToy】新玩家~❤

    最近对shader产生了浓厚兴趣,发现一个超有意思的网站shadertoy.com,各种有意思的shader,很多都是百行以内代码实现,除了学习,作为opgl的练习场所也很不错. 分享今天看的一篇sh ...

  10. ssh远程登陆脚本(带跳板机)

    mac自带的终端不太好用,被推荐了一个iterm2的终端替代工具,确实比自带的终端好用不少.下面记录下通过脚本一键远程登录的过程: 下载地址:http://m4.pc6.com/xuh3/iTerm2 ...