Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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 如何处理长度不同的列表和数组?_Python_Arrays_List_Vectorization_Variable Length - Fatal编程技术网

Python 如何处理长度不同的列表和数组?

Python 如何处理长度不同的列表和数组?,python,arrays,list,vectorization,variable-length,Python,Arrays,List,Vectorization,Variable Length,我有以下代码: ray_points = [np.array([r1_1, r2_1, r3_1, r4_1]),np.array([r1_2, r2_2, r3_2, r4_2]),np.array([r1_3, r2_3, r3_3, r4_3])] 列表光线点包含光线的坐标。对于这个例子,我有四条光线(r1、r2、r3、r4)。每次我找到光线的下一个坐标后(当光线移动并撞击另一个表面时,它们具有“新”坐标),我都会在列表中添加一个新的大小数组(4L,3L),(4L代表四条光线,3L代表三

我有以下代码:

ray_points = [np.array([r1_1, r2_1, r3_1, r4_1]),np.array([r1_2, r2_2, r3_2, r4_2]),np.array([r1_3, r2_3, r3_3, r4_3])]
列表
光线点
包含光线的坐标。对于这个例子,我有四条光线(r1、r2、r3、r4)。每次我找到光线的下一个坐标后(当光线移动并撞击另一个表面时,它们具有“新”坐标),我都会在列表中添加一个新的大小数组(4L,3L),(4L代表四条光线,3L代表三个空间坐标)。例如,r1_2是一个长度为3的数组,表示射线r1的第二个坐标,r3_3表示射线r3的第三个坐标,依此类推

我以前的方法是有N个不同的列表,每个列表都包含使用具有形状(3L,1L)的数组的坐标,用于N个不同的光线。现在我使用一个(4L,3L)数组来存储每个新交叉点的所有光线坐标,因为我想“矢量化”我的代码以加快速度。(想象一下,如果我有10万条光线)。每次我要计算下一个坐标、下一个折射方向等时,我都会经过光线的最前面的坐标,这是简单的
光线点[-1]
到我的函数和直接计算此数组的所有内容的函数,通过创建N个不同的列表并循环每个光线进行计算,这比我之前做的要快得多

现在的问题是,如果不同的光线有不同数量的曲面相交,因此有不同数量的新坐标,我会遇到麻烦。例如,光线r1已经折射10次,并且已经终止,所以我将只使用r1_1,r1_2。。。r1_10。但我仍然需要跟踪其他射线r2,r3,r4。由于我使用一个4X3数组,其中包含4条射线的坐标,因此我必须不断向r1添加坐标。我可以使用保持r1的新点/方向相同的方法,但我只是在浪费内存,想象一下,如果所有光线都被终止,并且我有一条光线一直在移动并具有新的坐标,那么
光线点的大多数元素实际上是冗余的


我想知道我应该如何设置我的初始代码,以便我可以使用这种矢量化方法来加快速度,但我仍然可以保留原始方法的优势-分别处理每条光线,以便我可以处理具有不同数量新坐标的光线。

我读了你的第二和第三段大约四遍,即使我是一名光学物理学家和python程序员,我必须说我一点也不知道你在问什么。试着用严格的计算机科学语言重复这个问题。我尽力把它解释得更清楚。看看新版本是否有助于你理解我的问题。我建议你把问题抽象出来。忽略您的独特问题,询问您希望形成什么样的数据结构。不管光线如何。。。我很难从你所拥有的中理解你想要什么。就我的两个世纪,我在这里问了一个新问题,这个问题应该更加精确和明确: