在方法中修改numpy数组的Python列表,而不传递整个列表

在方法中修改numpy数组的Python列表,而不传递整个列表,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个标准的numpy数组列表,因为每个项目的维度数量不相等,我将其转换为uint8(大量十六进制值),然后执行操作以规范化每个numpy数组的维度,这样我就可以将其从列表转换为多维numpy数组 为了实现这一点,我需要使用一些方法使代码可读,但当我将列表中的一个numpy数组传递给一个方法时,我还必须传递整个列表和迭代器: def push_bytes(messages, message, start_byte, i): messages[i] = np.insert

我有一个标准的numpy数组列表,因为每个项目的维度数量不相等,我将其转换为uint8(大量十六进制值),然后执行操作以规范化每个numpy数组的维度,这样我就可以将其从列表转换为多维numpy数组

为了实现这一点,我需要使用一些方法使代码可读,但当我将列表中的一个numpy数组传递给一个方法时,我还必须传递整个列表和迭代器:

    def push_bytes(messages, message, start_byte, i):
        messages[i] = np.insert(messages[1], start_byte, 0, 0)
我多次调用此方法,因此我不想传递整个列表和迭代器,这样我可以执行以下操作:

    def push_bytes(message, start_byte):
        message = np.insert(message, start_byte, 0, 0)
我相信这不起作用的原因是因为
message=
正在创建一个新的numpy数组,而不是指向原始数组,有没有一种方法可以指向原始数组而不必传递整个列表和迭代器

样本数据:

messages = [
    [  5   1   0   0   0  47  69 222  10 221 242 132   0   0   0  79   0   0  ]
    [  5   1   0   0   0  27  68 222  10  86   7 133  95 126 220  38   0  ]
    [  5   1   0   0  45  48   0   0   7  10  86   7 133  95 126 220  30   0   0   0  79   0   0  ]
    [  5   1   0   0   0  47  69 222  10 129  10 133  95 126 220   5   0   0   0  75   0   0  ]
    [  5   1   0   0  17  39   0   0 112  66 222  10 129  10 133  ]
    [  5   1   0   0   7  69 222  10 138   0   0  55   0   0   0  79   0   0  ]
    [  5 222  10 138  10 133  95 126   0   0  24   0   0   0  79   0   0  ]
    [ 17  39   0   0 232  66 222  10 138  10 133   0   0   0   0   0  93   0   0 ]
]
类似于以下的函数:

def push_bytes(messages, i, start_byte):
     messages[i] = np.insert(messages[i], start_byte, 0, 0)
将修改(实际替换)消息列表中的第i个元素。正在传递的是对列表的引用。没有复制或其他昂贵的东西

np.insert
函数确实创建了一个新数组,并在
消息
列表中放置了对该数组的引用

在:

message=…
将新数组分配给
message
变量,但它是一个局部变量,并且不会修改函数外部的变量。您必须添加一个

    return message

messages[i] = push_bytes(messages[i], start_byte)
修改
消息
列表的元素


我认为这两个函数的执行时间相似,因为它们只传递引用,不需要不同的计算或拷贝。第二个是,在大多数情况下,更干净,因为它不假设任何关于
消息的内容;它只是创建新的数组(我想这不仅仅是对
np.insert
)的简单调用。

您能提供一些示例数据吗?另外,什么是
count
。insert
创建一个新数组-
push_bytes
没有理由负责修改原始列表。实际上,可能根本没有理由修改原始列表。类似于
new_list=[push_bytes(…)for…in…][/code>的方法更有意义,因为
push_bytes
返回新数组。@markmoreto我编辑了问题并删除了计数,我使用的实际方法要复杂得多,在某个位置插入给定数量的字节,这使用循环来完成。我将添加示例数据yes@user2357112supportsMonica我会这么做,但我在多核上处理大量数据,不幸的是,在列表中加倍使用太多内存。非常感谢,是的,这更干净了。很高兴听到它只是传递引用而不是复制,我是python新手,对此不确定。我希望Python或NoMPy中有一些内置的东西,在这里你可以传递C++的实际地址和撤销引用。到目前为止,我很喜欢python,但我想这种类型的东西是该语言的缺点。我发现了另一个问题,它展示了一种解决方法:但结论是它太麻烦了,返回值更好。它也有很多关于引擎盖下发生的事情的不同答案中的更多信息。
messages[i] = push_bytes(messages[i], start_byte)