Python 以单例维度的numpy视图为例 安装程序

Python 以单例维度的numpy视图为例 安装程序,python,numpy,Python,Numpy,我有一个Fortran有序numpy数组,具有单态第一维 In [1]: import numpy as np In [2]: x = np.array([[1, 2, 3]], order='F') In [3]: x.strides Out[3]: (8, 8) 我使用较小的数据类型查看此数组 In [4]: y = x.view('i2') In [5]: y Out[5]: array([[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]], dtype=i

我有一个Fortran有序numpy数组,具有单态第一维

In [1]: import numpy as np

In [2]: x = np.array([[1, 2, 3]], order='F')

In [3]: x.strides
Out[3]: (8, 8)
我使用较小的数据类型查看此数组

In [4]: y = x.view('i2')

In [5]: y
Out[5]: array([[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]], dtype=int16)

In [6]: y.strides
Out[6]: (8, 2)
问题 首先,我是否应该关注这一结果?下一行有超过8个字节

其次,我真的希望这个数组的形状是
(4,3)
,而不是
(12,3)
。通常使用Fortran布局的数组
。view
将扩展第一个维度,而不是第二个维度

第三,如何将上面的数组(或由类似过程生成的任何数组)转换为
(4,3)
数组,以便在这种情况下,四行中有三行都是零。我是否缺少一个巧妙的换位技巧

版本
奇怪的是,当我重复你的步骤时,我马上得到了(4,3):

In [637]: x=np.array([[1,2,3]],'int64',order='F')
In [638]: x
Out[638]: array([[1, 2, 3]], dtype=int64)
In [639]: y=x.view('i2')
In [640]: y
Out[640]: 
array([[1, 2, 3],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]], dtype=int16)
In [641]: x.shape
Out[641]: (1, 3)
In [642]: y.shape
Out[642]: (4, 3)
In [643]: x.strides
Out[643]: (8, 8)
In [644]: y.strides
Out[644]: (2, 8)
Py3上的My numpy 1.8.2(旧32b机器)

按C顺序

In [655]: x=np.array([[1,2,3]],'int64')
In [656]: y=x.view('i2')
In [657]: y
Out[657]: array([[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]], dtype=int16)
In [658]: y.strides
Out[658]: (24, 2)
In [659]: x.strides
Out[659]: (24, 8)
文档中说,“在由…fortran排序定义的数组中,通常应该避免使用更改数据类型大小(每个条目的字节数)的视图”,因此您在这里遇到了危险。
In [655]: x=np.array([[1,2,3]],'int64')
In [656]: y=x.view('i2')
In [657]: y
Out[657]: array([[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]], dtype=int16)
In [658]: y.strides
Out[658]: (24, 2)
In [659]: x.strides
Out[659]: (24, 8)