Re: problem with Delete[]
- To: mathgroup at smc.vnet.net
- Subject: [mg58948] Re: problem with Delete[]
- From: Peter Pein <petsie at dordos.net>
- Date: Sun, 24 Jul 2005 01:22:09 -0400 (EDT)
- References: <dbt3vk$sn3$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Heath Gerhardt schrieb: > Hello, > > Delete[] is not removing elements of v in the following function, could > anyone tell me why? > > Rn[N_, p_] := Module[{A, v, c, q, i, j}, > A = Table[0, {i, 1, N}, {j, 1, N}]; > v = Table[i, {i, 2, N}]; > c = 1; > For[i = 1, i < N, i++, > j = Random[Integer, {1, Dimensions[v][[1]]}]; > A[[c, v[[j]]]] = 1; > A[[v[[j]], c]] = 1; > q = Random[]; > If[q > p, c = v[[j]]]; > Delete[v, j]; > ]; > A > ] > > thanks in advance, > Heath > Hi, you forgot to assign the new (shorter) vector to v: ... v=Delete[v,j] ];A] ======================== If you have to generate large matrices, consider another approach: Pn[N_, p_] := Module[{a = {}, c = 1}, Fold[(a = {a, c, #1[[#2]]}; If[Random[] > p, c = #1[[#2]]]; Delete[#1, #2]) & , Range[2, N], Random[Integer, {1, #1}]& /@ Range[N - 1, 1, -1]]; a = Union[Partition[Join[#1, Reverse[#1]]&[Flatten[a]], 2]]; Normal[SparseArray[(#1 -> 1 & ) /@ a, {N, N}]]]; or omit the call to Normal to use SparseArrays (and about 0.1% of the RAM used by the normalized array). The version using For[] needs about Pi seconds ;-) for a 5555x5555 matrix: Timing[Rn[5555, 0.5555];] >>>{3.141*Second, Null} The version using Fold[] and Map[] ("/@") needs for the same task: Timing[Pn[5555, 0.5555];] >>>{0.313*Second, Null} -- Peter Pein Berlin