Python ndarray.view()不';如果条目是多维的,则无法工作?
我有一个多维NumPy数组shapePython 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.
(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]])]