Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ndarray.view()不';如果条目是多维的,则无法工作?_Python_Arrays_Numpy - Fatal编程技术网

Python ndarray.view()不';如果条目是多维的,则无法工作?

Python ndarray.view()不';如果条目是多维的,则无法工作?,python,arrays,numpy,Python,Arrays,Numpy,我有一个多维NumPy数组shape(n,I,j,k,…),我想把它看作一个长度n的列表,其中包含shape(I,j,k,…)。(使后续的计算更容易。)现在,它可以很好地工作,但前提是条目是标量或向量。如果条目是矩阵,则失败: 将numpy导入为np #好的 a=np.rand.rand(7) b=np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize*1))) #好的 a=np.random.rand(7,2) b=np.

我有一个多维NumPy数组shape
(n,I,j,k,…)
,我想把它看作一个长度
n
的列表,其中包含shape
(I,j,k,…)
。(使后续的计算更容易。)现在,它可以很好地工作,但前提是条目是标量或向量。如果条目是矩阵,则失败:

将numpy导入为np
#好的
a=np.rand.rand(7)
b=np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize*1)))
#好的
a=np.random.rand(7,2)
b=np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize*2)))
#失败
a=np.random.rand(7,2,3)
b=np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize*2*3)))

有没有关于这里出了什么问题的提示?

您将视图作为np.void类型进行操作?你想操纵字节吗

如果您只想将一个shape
(n,i,j,k,…)
数组转换为一个包含n个shape
(i,j,k,…)元素的python列表
为什么不直接使用

a=np.random.uniform(大小=(7,2,3))
new_a_shape=(-1,)+a.shape[2:]#以摆脱第一维度
b=np.分割(a.重塑(新形状),a.形状[0])
导致

[array([[0.07452901, 0.4068812 , 0.87074721],
        [0.23739783, 0.67298745, 0.96651022]]),
 array([[0.94348732, 0.004426  , 0.75326683],
        [0.35342782, 0.98006333, 0.46106085]]),
 array([[0.92510793, 0.90671794, 0.34370929],
        [0.42120306, 0.41411307, 0.94946278]]),
 array([[0.49097638, 0.53814849, 0.10396104],
        [0.19402855, 0.31811608, 0.13399161]]),
 array([[0.91071595, 0.3167224 , 0.42786695],
        [0.62646702, 0.68093573, 0.24839687]]),
 array([[0.95266909, 0.13838363, 0.10488899],
        [0.40992171, 0.29816304, 0.31875   ]]),
 array([[0.03371908, 0.29406525, 0.65801023],
        [0.93566766, 0.84455742, 0.40625077]])]

最后一个使用
3
而不是
2*3
可以工作。注意,视图保留了尺寸的数量,只是将最后一个更改为1。我没有使用过这种观点,也看不出它的价值
b
显示为一个由
b'strings'
组成的数组。有没有办法只保留前导维度?我没有注意到完整的错误消息,
数组最后一个轴的总大小(以字节为单位)。
这个复合数据类型视图对我来说更有意义-
视图(np.dtype([('f0','f8',(3),)])
)。但它也在做类似的事情,将最后一个维度整合到一个“记录”中。形状仍然是(7,2,1)。将形状改为(7,6)怎么样?
list(a)
做同样的事情,而且速度更快。很酷,我以为list(a)等同于.tolist(),但你是对的!是的,了解
list
tolist
之间的区别很有用。通常,
tolist
更有用,而且通常更快。但是这个OP有一些不寻常的要求。
[array([[0.07452901, 0.4068812 , 0.87074721],
        [0.23739783, 0.67298745, 0.96651022]]),
 array([[0.94348732, 0.004426  , 0.75326683],
        [0.35342782, 0.98006333, 0.46106085]]),
 array([[0.92510793, 0.90671794, 0.34370929],
        [0.42120306, 0.41411307, 0.94946278]]),
 array([[0.49097638, 0.53814849, 0.10396104],
        [0.19402855, 0.31811608, 0.13399161]]),
 array([[0.91071595, 0.3167224 , 0.42786695],
        [0.62646702, 0.68093573, 0.24839687]]),
 array([[0.95266909, 0.13838363, 0.10488899],
        [0.40992171, 0.29816304, 0.31875   ]]),
 array([[0.03371908, 0.29406525, 0.65801023],
        [0.93566766, 0.84455742, 0.40625077]])]