【发布时间】:2016-11-03 08:44:19
【问题描述】:
我正在使用 Python 2.7 创建一个复值 (m x n) 维数组,该数组没有最初已知的固定大小(即 m 和 n 事先不知道),它将为特定元素分配不同的值。因此,我将更改现有元素或在将来指定的任意位置向该数组添加新元素。
一般来说,我想将一个指定大小的初始数组转换为 (m x n) 维数组。例如,如果我从
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
我想更新它以产生案例 1、案例 2 或案例 3(无论我决定选择哪一个)。本质上,我要做的就是将零行或列(或两者)添加到初始数组。
案例一:
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
案例2:
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
案例3:
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
当使用与上述类似的方法但使用 np.insert 时,我可以通过以下方式重现我想要的内容:
import numpy as np
T = np.zeros((2,3),dtype=np.complex_)
T = np.insert(T,len(T[0]),1,axis = 1)
或
T = np.zeros((2,3),dtype=np.complex_)
T = np.insert(T,len(T[:,0]),1,axis = 0)
使用这种方法,我可以尝试实现案例1、2或3,但是有什么特别有效的方法吗?
再一次,约束是必须使用具有复杂类型元素的对象,因为这些条目将在进一步的算术中使用。我可以将元素的真实部分和复杂部分分开,然后再创建两个列表,但仍然需要对它们应用数学运算。此外,最终数组的 m 和 n 值(大大)可能超过 1000。(数组的最终必要大小要到代码末尾才能知道。)
任何关于能够以更有效的方式将空行或空列添加到初始数组的见解都会很棒。
【问题讨论】:
-
您可能根本不想为此使用数组。 NumPy 数组根本不是为这种用途而设计的。考虑使用字典或其他东西。
-
这就是我似乎正在阅读的内容。使用数组的主要原因是因为条目必须是复数值并用于进一步的数学运算。我可以将这些值分成一个实数和复杂的部分并创建两个单独的列表,但是仍然需要继续附加到这些列表并对这些元素执行操作(例如三角函数/双曲线函数、求幂、绘图)。
-
没有什么能阻止您将复数放入列表或字典中。
-
@user2357112 嗯,我会对每个列表做很多不同的运算,每个数学运算还需要我创建一个全新的列表,例如:
new_list = [ x%num for x in old_list]这难道不是计算上的吗?密集的?我觉得通过列表运行大量算术也会有点混乱,尽管这对于代码的运行时间来说是次要的。
标签: python numpy multidimensional-array scipy append