我想操作numpy数组来使用它们的索引,我想要包含0维的情况.现在我遇到了一个奇怪的情况,如果我不使用就地乘法,则会出现类型转换:
In [1]: import numpy as np
In [2]: x = 1.*np.array(1.)
In [3]: y = np.array(1.)
In [4]: y *= 1.
In [5]: x
Out[5]: 1.0
In [6]: y
Out[6]: array(1.)
In [7]: type(x)
Out[7]: numpy.float64
In [8]: type(y)
Out[8]: numpy.ndarray
Run Code Online (Sandbox Code Playgroud)
为什么x的类型与y不同?我知道,inplace操作是不同的实现,他们不创建数组的副本,但我不明白,为什么类型被更改,如果我将一个0d数组与浮点数相乘?它适用于1d阵列:
In [1]: import numpy as np
In [2]: x = np.array(1.)
In [3]: y = np.array([1.])
In [4]: 1.*x
Out[4]: 1.0
In [5]: 1.*y
Out[5]: array([1.])
In [7]: type(1.*x)
Out[7]: numpy.float64
In [8]: type(1.*y)
Out[8]: numpy.ndarray
Run Code Online (Sandbox Code Playgroud)
我想,这很奇怪......现在我遇到了以下问题,我必须分别处理0d数组: …
我想从压缩的蒙版数组和相应的蒙版创建一个数组。用一个例子更容易解释:
>>> x=np.ma.array(np.arange(4).reshape((2,2)), mask = [[True,True],[False,False]])
>>> y=x.compressed()
>>> y
array([ 2, 3])
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个与x形状相同的数组,其中被掩码的值获得一个标准值(例如-1),其余的用给定的数组填充。它应该像这样工作:
>>> z = decompress(y, mask=[[True,True],[False,False]], default=-1)
>>> z
array([[-1, -1],
[ 2, 3]])
Run Code Online (Sandbox Code Playgroud)
问题是:是否有类似“解压缩”的方法,还是我需要自己编写代码?在Fortran中,这是通过“ pack”和“ unpack”方法完成的。感谢您的任何建议。