假设我有以下列表:
rays_all = [np.array(r11, r21, r31, r41),
np.array(r12, r22, r32, r42),
np.array(r13, r23, r33, r43),
np.array(r14, r24, r34, r44)]
所有的r11、r21、r31等都是具有形状(3L,)的数组(把它看作是三维空间中的向量)。你知道吗
如果我想提取np.array(r14, r24, r34, r44)
的(4L,3L)数组,我只需要使用rays_all[-1]
。如果我想附加一个新的np.array(r15, r25, r35, r45)
数组,我只需要使用rays_all.append
。你知道吗
现在我以另一种方式排列上述向量(r11、r12等):
ray1 = [r11, r12, r13, r14]
ray2 = [r21, r22]
ray3 = [r31, r32, r33]
ray4 = [r41, r42, r43, r44]
每个“光线”现在都有自己的长度不同的列表。如果要提取数组结构中每个列表的最后一个元素,即np.array([r14,r22,r33,r44])
,最有效的方法是什么?另一方面,如果我想将数组np.array([r15,r23,r34,r45])
中的元素添加到列表中
ray1 = [r11, r12, r13, r14, r15]
ray2 = [r21, r22, r23]
ray3 = [r31, r32, r33, r34]
ray4 = [r41, r42, r43, r44, r45]
最有效的方法是什么?我知道我可以用一个循环来实现,但是我猜它比rays_all[-1]
和rays_append()
慢得多?有什么“矢量化”的方法吗?你知道吗
为了回答您的具体问题,包含四个“ray”列表中最后一个元素的列表通常是
[ray1[-1],ray2[-1],ray3[-1],ray4[-1]]
。你知道吗因为这里您主要关心的是执行速度,所以我假设您必须反复执行此操作。您是否考虑过创建一个表示最后一个元素的小数据结构,例如
last_element = [r1x,r2x,r3x,r4x]
,并在逐步解决问题时维护它的值?每次更改last_element
时,都会根据需要向其他列表添加新数据。换句话说,不要重复地从大列表中提取最后一个元素,而是从最后一个元素一步一步地构建大列表。不管怎样,只要你必须建立那些大的列表,那就必须更有效率。它能解决你的问题吗?你知道吗小心混合数组和列表操作。你知道吗
制作一些3元素数组,并像第一种情况一样将它们组合起来:
rays
现在是一个包含两个2d数组((2,3)形状)的列表。正如您所说的,您可以从该列表中选择一个项目或向其附加另一个数组(您可以向其附加任何内容,而不仅仅是一个类似的数组)。rays
的操作是列表操作。你知道吗也可以创建三维阵列:
您可以从
ray_arr
中进行选择。但是追加需要通过np.concatenate
(可能隐藏在np.append
函数中)创建一个新数组。列表中没有“就地”附加。你知道吗通过索引最后一个维度,有效地选择所有组件数组的最后一个元素。你知道吗
要从列表
rays
中获得相应的值,必须使用列表理解(或其他循环):没有像数组那样的索引快捷方式。你知道吗
有像
zip
(和itertools
中的其他工具)这样的工具可以帮助您遍历列表,甚至重新排列值,例如以及参差不齐的子列表:
但我看不出这些对从光线向量中提取值有什么帮助。你知道吗
值得探索的是,将基向量收集到一个2d数组中,并将索引用于各种用途的额外组
所有射线的“z”坐标
光线的一个子集(因为它是一个切片,所以它是一个视图)
另一个子集:
3项子集,用列表选择-这是一个副本
通过索引获得的几个子集:
如果组是连续的,则可以使用
split
:子阵列是视图(使用
.__array_interface__
属性检查)。你知道吗实际上,它只是将不完整的列表问题提升了一个层次。不过,还有更多的灵活性。您可以构造其他索引子列表,例如
您可以将一些新值连接到
allrays
。然后您可能需要重建索引列表。但我怀疑这类建筑是一次建成,而通道是重复的。你知道吗我想到了一个关于从
plt.pcolormesh
(和plt.pcolor
)产生的img
访问值的问题。一种是将图像作为二维网格上的曲面进行维护,另一种则更一般,只是四边形的集合,每个四边形都有一个颜色和路径来定义其边界。你知道吗相关问题 更多 >
编程相关推荐