在网格上进行BFS (例如,两个单元之间的最短距离)。可以使用两个数据结构来承载visited信息:
1)列表,即data = [[False for _ in range(cols)] for _ in range(rows)]。稍后,我们可以通过data[r][c]访问某个单元格中的数据。
2) Dict,即data = dict()。稍后,我们可以通过data[(r, c)]访问某个单元格中的数据。
我的问题是:在这样的BFS场景中,哪一个计算效率更高?
从编码的角度来看,dict方法似乎节省了更多的字符/行。就内存而言,dict方法可能会为未触及的单元格节省一些空间,但也会浪费一些空间
我试图将"data.txt“中的数据放入一个numpy数组中,并用matplotlib绘制它。下面是数据的每一行:
"1“11.658870417634 4.8159509459201
大约有一千万行。
我试着把它放到内存映射中,但一直收到这个错误:
ValueError: Size of available data is not a multiple of data-type size.
下面是我使用的代码:
import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyp
在Python中处理数据类型numpy数组时,我有些困惑。
问题1
我在python整数中执行以下脚本
>>> import numpy as np
>>> L = [1000,2000,3000]
>>> A = np.array(L)
>>> B = A
然后我检查以下内容:
>>> A is B
True
>>> id(A) == id(B)
True
>>> id(A[0]) == id(B[0])
True
这很好。但当时发生了一些奇怪的事情。
>>
我正在尝试调整在计时器上更新的绘图代码(matplotlib)的底层结构,使其从使用Python列表显示绘图数据转变为使用numpy数组。我希望能够尽可能地降低绘图的时间步长,因为数据可能会上升到几千个点,如果做不到,我就会很快失去宝贵的时间。我知道numpy数组是这种事情的首选,但我很难弄清楚什么时候需要像Python程序员那样思考,什么时候需要像C++程序员那样思考,最大限度地提高内存访问效率。
它在append()函数的scipy.org文档中表示,它返回附加在一起的数组的副本。所有这些副本都被正确地进行了垃圾回收吗?例如:
import numpy as np
a = np.aran
我正试图计算大型numpy数组的平均值。最初,我试过:
data = (np.ones((10**6, 133))
for _ in range(100))
np.stack(data).mean(axis=0)
但我得到了
numpy.core._exceptions.MemoryError:无法为具有形状(100、1000000、133)和数据类型float32的数组分配xxx GiB
在原始代码中,数据是一个更有意义的向量生成器。
我考虑过使用dask进行这样的操作,希望它能将我的数据分割成由磁盘支持的块。
import dask.array as da
import
构建scipy稀疏矩阵的最好方法之一是使用coo_matrix方法。
coo_matrix((data, (i, j)), [shape=(M, N)])
where:
data[:] are the entries of the matrix, in any order
i[:] are the row indices of the matrix entries
j[:] are the column indices of the matrix entries
但是,如果矩阵非常大,则将整个i,j和数据向量加载到存储器中是不现实的。
如何构建这样的数据:( coo_matrix,(i,j)
我有很多文件,每个文件都被读取为一个形状(n, 1000)的矩阵,其中n可能因文件不同而不同。
我想把它们连接到一个大的Numpy数组中。我现在这样做:
dataset = np.zeros((100, 1000))
for f in glob.glob('*.png'):
x = read_as_numpyarray(f) # custom function; x is a matrix of shape (n, 1000)
dataset = np.vstack((dataset, x))
但是效率很低,因为我多次通过将现有数组与读取的下一个文件堆叠来
有许多简单的教程,也有很多问题和答案,声称Ray以某种方式与工作人员共享数据,但这些都没有详细说明如何在哪个操作系统上共享数据。
例如,在这个“所以答案”中:,一个np数组被序列化到共享对象存储中,然后被几个工作人员使用,所有工作人员都访问相同的数据(从这个答案复制的代码):
import numpy as np
import ray
ray.init()
@ray.remote
def worker_func(data, i):
# Do work. This function will have read-only access to
# the data array.
我正在做一些工作,我不得不以一种名为的格式加载一个操作CT图像。
这种操作的一部分是将原始二进制数据加载到一个numpy数组中,并将其重塑到正确的维度,这需要花费大量图像的时间。下面是一个示例:
headshape = (512,512,245) # The shape the image should be
headdata = np.fromfile("Analyze_CT_Head.img", dtype=np.int16) # loads the image as a flat array, 64225280 long. For testing, a large arr
我希望加载尽可能多的数据,因为这是安全的,这样当前的过程就像其他进程一样工作良好。我宁愿只使用RAM (不使用交换),但欢迎任何建议。过多的数据可以被丢弃。怎样才是正确的方法呢?如果我只是等待MemoryException,系统就变得不可操作(如果使用list)。
data_storage = []
for data in read_next_data():
data_storage.append(data)
数据最终将被加载到numpy数组中。
% save .mat file in the matlab
train_set_x=1:50*1*51*61*23;
train_set_x=reshape(train_set_x,[50,1,51,61,23]);
save(['pythonTest.mat'],'train_set_x','-v7.3');
在matlab中得到的数据大小为(50,1,51,61,23)。
我在Python中加载.mat文件,其中包含了这个的指令。
守则如下:
import numpy as np, h5py
f = h5py.File
我已经阅读了非常大的tdms文件,其中包含传感器数据到numpy数组的列表中。结构如下:来自多个文件的数据存储在一个名为file_data的对象的实例中。对象对每种传感器类型都有属性,这些属性基本上是numpy数组的列表(该传感器类型的每个传感器都有一个)。
我想知道我在这里存储了多少数据(因为Labview生成的tdms文件的大小和所有元数据似乎都没有多大意义)。
这是代码:
# Check memory
total = 0
file_data = [file_data1, file_data2, ...] # list of data objects read from six files
我有过 int[,,,] arr = new int[5, 6, 7, 8]; // c#
arr = np.zeros((5, 6, 7, 8)) # Python 具有5 * 6 * 7 * 8单元的4d阵列。 我想把它切成c#,就像numpy那样 var mySlice = arr[2:4, 0, :2, :]; // Won't work in C#, but looking for a way to do this. return type should be int[,,] A 3d array with 2 * 1 * 2 * 8 cells.
my_slice = a