学习Python数据分析随手笔记【三】numpy数组的函数ix_()

今天我去图书馆借了一本Python DataAnalysis的书

 

那今天来说一个关于numpy库的内容。

当然

课本给出的是著名的lena图片。不过在pycharm上运行的时候发现它报错了。随即就去查看了scipy的文件搜寻了半天。原来在新版本的scipy中已经将lena移除,不过再细心一看,就发现了一个ascent的文件。Show一哈子就发现了 lane已经被替换成了

这样的一个图片。

Emm好吧 就拿这个图片试试。

那就介绍一下这次的主要函数吧 ix_函数 这个函数可以为了获得多元组的结果而用来结合不同向量

那到底是什么样子的呢。

参照上面的代码如下:

import numpy as np
import matplotlib.pyplot as plt
import scipy.misc
floor = scipy.misc.ascent()
xmax = floor.shape[
0]
ymax = floor.shape[
1]
def indices(size):
    arr = np.arange(size)
    np.random.shuffle(arr)
#shuffle将序列随机排序
   
return arr
xin =
indices (xmax)
np.testing.assert_equal(
len(xin),xmax)
yin =
indices (ymax)
np.testing.assert_equal(
len(yin),ymax)
plt.imshow(floor[np.ix_(xin
,yin)])
plt.show()

运行结果如下:

balabalabala

就是这个类似马赛克东西。

其实这个图片就是由很多个数组规律的排序而成。

利用numpy.random的子程序包 shuffle()把数组的元素随机的索引号重新排列使得数组产生相应的变化。

然后用ix_()函数重新返回元组并且由imshow把他画出来

那这个ix_函数到底是个什么呢?

其实这个函数可以根据多个序列生成一个网格,他需要一个一维数组作为参数,并且返回一个numpy数组构成的元祖,至于为什么是numpy数组呢?因为他后面带着个一个大大的array!!!

至于过程啥样子呢?

打开ipython试试

In:ix_([0,1],[1,2])

Out: (array([[0],

       [1]]), array([[1, 2]]))

还有一个就是

np.testing.assert_equal(len(xin),xmax)
这是个什么东西?查了一下CSDN论坛发现涉及的太少了,去查numpy库的时候又因为繁多找的我头昏眼花,于是我决定直接看这个方法的源代码,尝试自己理解一下。然鹅。。。。。。

Raises an AssertionError if two objects are not equal.

Given two objects (scalars, lists, tuples, dictionaries or numpy arrays),
check that all elements of these objects are equal. An exception is raised
at the first conflicting values.

Parameters
----------
actual : array_like
    The object to check.
desired : array_like
    The expected object.
err_msg : str, optional
    The error message to be printed in case of failure.
verbose : bool, optional
    If True, the conflicting values are appended to the error message.

Raises
------
AssertionError
    If actual and desired are not equal.

Examples
--------
>>> np.testing.assert_equal([4,5], [4,6])
...
<type 'exceptions.AssertionError'>:
Items are not equal:
item=1
 ACTUAL: 5
 DESIRED: 6

它给了我这样的解释。。。好吧不用我自己理解了。显而易见,这是一个判断的内容。检查这个对象所有元素是否相等。画重点!!!

他还给了一个例子。Examples

   --------

   >>> np.testing.assert_equal([4,5], [4,6])

    ...

   <type 'exceptions.AssertionError'>:

    Itemsare not equal:

   item=1

    ACTUAL: 5

    DESIRED: 6

自己体会!

好了,现在时间20.37不看了。回宿舍打游戏去了。舍友等着我吃鸡呢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy数组元素周围的操作可以通过以下几种方式实现: 1. 切片操作:可以使用numpy数组的切片操作来获取数组中元素的周围元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下切片操作: ```python arr[i-1:i+2, j-1:j+2] ``` 这将返回一个3x3的子数组,其中心元素为arr[i,j],周围的8个元素为该子数组的其余元素。 2. 使用numpy.pad()函数numpy.pad()函数可以用来在数组的边缘添加一个或多个值,从而扩展数组的大小。可以使用该函数来添加额外的行和列,然后通过索引访问周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python padded_arr = np.pad(arr, ((1, 1), (1, 1)), mode='constant') surrounding = padded_arr[i:i+3, j:j+3] ``` 这将在数组的边缘添加一行和一列,并使用常量值填充这些额外的元素。然后可以使用切片操作来获取中心元素周围的元素。 3. 使用numpy.roll()函数numpy.roll()函数可以用来沿着给定轴滚动数组的元素。可以使用该函数来将数组的行和列进行滚动,从而获取周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python rows, cols = arr.shape row_indices = np.arange(i-1, i+2) % rows col_indices = np.arange(j-1, j+2) % cols surrounding = arr[row_indices][:, col_indices] ``` 这将将第i行向上和向下滚动一行,并将第j列向左和向右滚动一列,从而获取中心元素周围的元素。使用模运算可以确保在数组的边缘滚动时正确处理索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值